Сохранение пароля с помощью Md5
Я использую Postgresql, hibernate и Java, и мне нужно сохранить пароль. Может кто-нибудь подсказать мне, как зашифровать пароль с помощью md5. Иначе есть ли лучший способ хранить безопасный пароль в базе данных
Спасибо
6 ответов:
Вы не должны использовать md5 для хэширования паролей. Он создан для скорости, которая облегчает атаку. Вместо этого используйте bcrypt. Кроме того, вы не должны пытаться расшифровать пароль после того, как он был сохранен. Смотрите примеры на странице bcrypt, чтобы узнать, как проверить пароль, введенный пользователем. Более Информация о том, как безопасно хранить пароли.
JBcrypt также очень прост в использовании. Вот как вы хэш пароля:
BCrypt.hashpw(password_from_user, BCrypt.gensalt());
И проверить это:
BCrypt.checkpw(password_from_user, hashed_password_from_database)
MD5 не является алгоритмом шифрования - это криптографическая хэш-функция. Это совсем другое дело! Вы можете хранить хэшированный пароль в базе данных, но вы не можете (в общем случае) восстановить пароль из хэша пароля. это сделано специально.
В некоторых случаях можнополучить пароль обратно из хэша-например, если пароль является словарным словом, его можно восстановить с помощью словарной атаки . Если пароль достаточно короткий и использует символы из ограниченного диапазона a грубая сила илирадужная Таблица атака может восстановить пароль. Когда вы храните хэшированный пароль, вы должны использовать соль иусиление ключа (напримерPBKDF2 ), чтобы сделать эти атаки более трудными.
Вы также должны знать, что MD5 считается сломанным и рекомендуется не использовать его для новых приложений. Есть лучшие альтернативы, например SHA-256 .
1) для MD5 нет расшифровки.
2) MD5-это старая технология, которая отлично подходит для проверки, чтобы увидеть, являются ли две строки одинаковыми.
3) MD5 подвергается словарным атакам.
4) MD5 можно сделать более безопасным с помощью соли.
5) мы используем MD5 для низкого уровня безопасности, потому что хэш может быть легко продублирован на разных платформах. (C++, vb.net, VB6, C#, php ...)
Если вы собираетесь использовать алгоритм хэширования, вы не можете расшифровать пароль. Вы хэшируете пароль и сохраняете хэш. Когда пользователь предоставляет свой пароль в будущем, вы хэшируете его с тем же алгоритмом и сравниваете новый хэш с тем, что вы хранили раньше.
Вы можете использовать класс MessageDigest в Java для хэширования значения. Ref: получить MD5 хэш в нескольких строках Java .
Edit: кроме того, я согласен с другими, кто говорит, что не следует использовать MD5 для этого больше не. Это старый алгоритм, который раньше был обычным, но он был атакован до бесполезности (для паролей). Есть все виды ресурсов онлайн для обратного поиска MD5.
Вы можете сделать это в postgres, если установите модуль pgcrypto contrib.
Затем вы можете зашифровать пароли следующим образом:
update ... set passwordhash = crypt('new password', gen_salt('md5'));
Конечно, вы не можете расшифровать его вообще!
Как указывали другие, это может быть плохой идеей, в зависимости от того, что вы пытаетесь сделать. Я был вынужден использовать MD5 раньше, потому что другое приложение потребовало его, но вы не хотите транслировать этот хэш в мир.
Я нашел библиотеку шифрования Jasypt весьма полезной.