У меня есть пароли для членов на сайте, зашифрованном с использованием MD5 и хранящемся в базе данных. Я хочу реализовать функцию потерянного пароля, когда пользователю будут отправляться по электронной почте их учетные данные, если они их забудут. Но как вывести незашифрованный пароль или это одностороннее шифрование и, следовательно, невозможно?
MD5 не шифрование – это односторонний хеш. Вы не можете отменить односторонний хеш (теоретически вы можете найти простой текст, который имеет эквивалентный хеш, который обычно хорош, но вы не можете в любое разумное время), поэтому вам просто нужно установить новый пароль и отправьте их по электронной почте в качестве временного и / или просто предоставите им ссылку для сброса пароля.
Точка использования одностороннего хэша – это предотвратить то, что вы пытаетесь сделать. Если вы можете прочитать пароль открытого текста, то любой, кто завладеет вашей базой данных, тоже может. Подсказка: что вы делаете со старыми резервными носителями? Бросить их в мусор? Известно, что преступники используют резервную копию для резервного копирования.
Вместо того, чтобы отправлять пароль пользователя к ним, настройте систему, чтобы они могли сбросить свой пароль. Прочитайте некоторые статьи об этом перед его внедрением.
[Весь ответ заменен благодаря подсказке с CodesInChaos; предыдущий ответ в истории.]
Вы не должны использовать MD5 для хранения ваших паролей. См. Нарушение пароля LinkedIn, если вам нужна более веская причина для перехода от MD5.
Чтобы предотвратить нарушение базы данных паролей от заголовков новостей, которые были связаны с LinkedIn, вам необходимо использовать значительно более эффективную функцию хэширования. Основанный на DES crypt(3)
возможно, был достаточно хорош в конце 70-х годов, но современные инструменты поиска в брутформенте могут легко тестировать миллионы потенциальных паролей в секунду.
В отличие от этого, тот же инструмент способен использовать только тысячи хэшей bcrypt в секунду. (К сожалению, они не публикуют тайминги в шинах.) Ваш MD5 в миллионы раз хуже, чем любая из этих готовых замен.
Для более широкого ознакомления с безопасностью пароля я рекомендую прочитать пароль безопасности: прошлые, настоящие, будущие слайды.
Вы не можете восстановить исходный пароль из хеша MD5. Это односторонняя хеш-функция.
Вы не должны предоставлять им простой текстовый пароль. Вместо этого вы должны либо изменить пароль, либо создать случайный вариант для их использования, а затем заставить их изменить его.
Вы не должны использовать MD5. Используйте sha1 и используйте также соль, в Интернете много информации.
Цель хэширования пароля – именно это. Он используется, потому что исходный пароль не может быть получен (теоретически), поэтому пароль будет сохранен безопасно, и его можно будет использовать для проверки правильности пароля.
Почти все веб-сайты решили создать новый пароль и отправить его по электронной почте в качестве механизма пароля забыть.
Хотя было указано, что md5 является хеширующей функцией, функция, которая берет пароль и возвращает строку, например. f(password) == hash
.
Можно вычислить пароль, который при использовании этой функции дает тот же хеш, например f(password) == hash == f(password")
Обычно это делается путем предопределения всех возможных паролей и хранения хэшей из них в радужном столе ( см. Запись в Википедии ). Можно скачать такие радужные столы, но они ОГРОМНЫЕ!
Вы не можете восстановить тот же пароль, который первоначально использовался пользователем из-за коллизий в хеширующей функции.
md5 – односторонняя функция шифрования / хэширования. После хэширования строку можно сравнить только с хэшей версией, а не с расшифровкой.