Сохранение пароля с помощью Md5 - PullRequest
5 голосов
/ 14 декабря 2010

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

Спасибо

Ответы [ 6 ]

9 голосов
/ 14 декабря 2010

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

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

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

И чтобы проверить это:

BCrypt.checkpw(password_from_user, hashed_password_from_database)
5 голосов
/ 14 декабря 2010

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

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

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

2 голосов
/ 14 декабря 2010

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

2 голосов
/ 14 декабря 2010

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

Вы можете использовать класс MessageDigest в Java для хешированияценность.Ссылка: Получить хэш MD5 в нескольких строках Java .

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

0 голосов
/ 14 декабря 2010

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

0 голосов
/ 14 декабря 2010

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

Затем вы можете зашифровать пароли следующим образом:

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

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

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

...