2010-12-14 3 views
5

Я использую Postgresql, hibernate и Java, и мне нужно сохранить пароль. Может кто-нибудь подскажет мне, как зашифровать пароль с помощью md5. Иначе есть лучший способ сохранить безопасный пароль в базе данныхСохранение пароля с помощью Md5

Благодарности

+0

Если вы скрываете пароль с MD5 (или другим алгоритмом хэширования), восстановить исходный пароль невозможно. Однако это может быть не обязательно - часто все, что вам нужно сделать, это проверить, является ли введенный пользователем пароль таким же, как и сохраненным, и в этом случае вы можете вычислить MD5 (или другой хэш) этого и посмотреть, получаете ли вы так же, как и то, что хранится. Но если вы хотите использовать пароль, например, для входа в базу данных, вам потребуется оригинальный пароль, а MD5 - это не то, что вы хотите. (BTW MD5 считается сломанным, поэтому лучше всего выбрать другой алгоритм!) – psmears

+0

Вы не можете «расшифровать» хеш-значение, созданное md5, каким-либо образом, по крайней мере пока. Если бы вы могли, вы бы в основном «сломали» его. MD5 является одной из криптографических хеш-функций: http://en.wikipedia.org/wiki/Cryptographic_hash_function –

+3

*** НЕ ИСПОЛЬЗУЙТЕ MD5 ДЛЯ ПАРОЛЬ! *** –

ответ

9

Вы не должны использовать md5 для хэширования паролей. Он построен для скорости, что облегчает атаку. Вместо этого используйте bcrypt. Кроме того, вы не должны пытаться расшифровать пароль после его сохранения. См. Примеры на странице bcrypt для проверки пароля с пользовательского ввода. Подробнее information о том, как безопасно хранить пароли.

jBcrypt действительно прост в использовании. Вот как вы хэш пароля:

BCrypt.hashpw(password_from_user, BCrypt.gensalt()); 

И проверить это:

BCrypt.checkpw(password_from_user, hashed_password_from_database) 
+1

Можете ли вы объяснить, почему не использовать md5 или sha1, поскольку это обычный способ сделать это? – JOTN

+0

Последняя ссылка объясняет все это. – dagge

+0

Это работает только до тех пор, пока кто-то не сделает fastbcrypt, как то, что произошло со старым алгоритмом хеширования Unix. – JOTN

5

MD5 не является encryption algorithm - это cryptographic hash function. Это совсем другое дело! Вы можете сохранить хешированный пароль в базе данных, но вы не можете (в общем) восстановить пароль из хэша пароля. Это по дизайну.

В некоторых случаях является можно получить пароль обратно из хэша - например, если пароль словарного слова он может быть восстановлен с помощью dictionary attack. Если пароль достаточно короткий и использует символы с ограниченным диапазоном, то атака brute force или rainbow table может восстановить пароль. Когда вы храните хешированный пароль, вы должны использовать salt и key strengthening (например, PBKDF2), чтобы сделать эти атаки более сложными.

Вы также должны знать, что MD5 считается сломанным, и рекомендуется не использовать его для новых приложений. Существуют лучшие альтернативы, например SHA-256.

+0

Согласовано. По-моему, SHA-256 по соли + пароль должен быть достаточным для 99,9% приложений. – cherouvim

2

Если вы собираетесь использовать алгоритм хеширования, вы не можете (не можете) расшифровать пароль. Вы используете пароль и сохраняете хэш. Когда пользователь предоставит свой пароль в будущем, вы получите его с тем же алгоритмом и сравните новый хэш с тем, что вы сохранили ранее.

Вы можете использовать класс MessageDigest в Java для хэш-значения. Ссылка: Get MD5 hash in a few lines of Java.

Редактировать: Кроме того, я согласен с другими, которые говорят, что не используют MD5 для этого больше. Это старый алгоритм, который когда-то был обычным явлением, но он был атакован с точки зрения бесполезности (для паролей). В MD5 обратном поиске есть всевозможные ресурсы онлайн.

0

Вы можете сделать это в postgres, если вы установите модуль pgcrypto contrib.

Вы можете зашифровать пароли, как это:

update ... set passwordhash = crypt('new password', gen_salt('md5')); 

Конечно, вы не можете расшифровать его на всех!

Как указывали другие, это может быть плохая идея, в зависимости от того, что вы пытаетесь сделать. Я был вынужден использовать MD5 раньше, потому что это потребовало другое приложение, но вы не хотите передавать этот хэш всему миру.

+1

Я бы не рекомендовал использовать конкретное решение СУБД с спящим режимом. Переносимость между базами данных является большим преимуществом для ее использования. – JOTN

+0

@JOTN Спасибо, это интересно знать. – 2010-12-14 20:30:50

2

1) Для MD5 нет расшифровки.
2) MD5 - это старая технология, которая отлично подходит для проверки того, являются ли две строки одинаковыми.
3) MD5 подвергается нападениям со словарем.
4) MD5 можно сделать более безопасным с помощью соли.
5) Мы используем MD5 для обеспечения низкого уровня, потому что хэш можно легко дублировать на разных платформах. (C++, vb.net, VB6, C#, php ...)

0

Я нашел библиотеку шифрования Jasypt весьма полезной.

Смежные вопросы