RoR - покоління MD5


77

Як я можу зашифрувати рядок за допомогою MD5 у Rails 3.0? pass = MD5.hexdigest(pass) в моделі даєuninitialized constant MyModel::MD5


3
Можливо, ви захочете ознайомитись із цим дописом,
Mike Buckbee

Пункт термінології: хешування, використовуючи, наприклад, алгоритм MD5, не є шифруванням . Ви щось шифруєте, коли також можете захотіти мати можливість його розшифрувати . Зазвичай ви не можете визначити вихідне повідомлення за хешем, і часто саме в цьому полягає сенс використання алгоритму хешування.
Плутанина

Відповіді:


177

Для цього ви можете використовувати Digest::MD5стандартну бібліотеку Ruby.

irb(main):001:0> require 'digest/md5'
=> true
irb(main):002:0> Digest::MD5.hexdigest('foobar')
=> "3858f62230ac3c915f300c664312c63f"

І ще одне: MD5 - це хеш-алгоритм. Ви нічого не «шифруєте» за допомогою хеш-алгоритму.


15
Ще одне: MD5 в основному зламаний (у криптографічному сенсі) і більше не повинен використовуватися. Якщо ви починаєте новий проект програмного забезпечення, використовуйте сильніший хеш-алгоритм, такий як SHA512 або bcrypt, і не забудьте додати сіль до своїх паролів перед їх хешуванням.
joschi

8
MD5 не працює для криптографічних цілей, але все ще може використовуватися для порівняння файлів. Зрештою, Git все ще використовує його. АЛЕ
НЕ МАЙТЕ ПАРОЛІ

2
Git використовує SHA1 майже для всіх своїх хеш-потреб.
joschi

2
Якщо ви хешуєте пароль для зберігання в базі даних, використовуйте bcrypt, а не MD5. Обидві вони доступні як бібліотеки Ruby, і з точки зору реалізації обидві вони однаково прості, але в малоймовірному випадку, коли ваша база даних буде скомпрометована (у чому вся суть хешування пароля перед зберіганням), bcrypt буде важче зламати, ніж md5, і тому завжди кращий вибір. Не забудьте додати сіль.
Lms
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.