Я хочу реализовать на своем веб-сайте функцию забытого пароля. Я хэширую пароли с помощью sha1. Как мне восстановить это для пользователя?
Какой лучший способ реализовать это?
Я хочу реализовать на своем веб-сайте функцию забытого пароля. Я хэширую пароли с помощью sha1. Как мне восстановить это для пользователя?
Какой лучший способ реализовать это?
Короткий ответ, нельзя.
Вы хотите реализовать функцию сброса пароля, а не функцию восстановления пароля. Весь смысл хеширования паролей заключается в том, что вы не можете хранить пароль пользователя и не можете восстановить его, если он потерян.
Это должно дать вам общее представление о как разрешить пользователям сбрасывать забытые пароли:
Лучший способ - не пытаться восстановить исходный пароль. Если пользователь теряет свой пароль, создайте новый случайный пароль и используйте внеполосный метод для его отправки (например, по электронной почте). Помните, что весь смысл хеширования пароля - предотвратить восстановление.
Я знаю, знаю, что электронная почта небезопасна. Но если вы требуете от пользователей немедленного изменения сгенерированного пароля, риск снижается.
Между прочим, я не могу рекомендовать достаточно, чтобы вы также солили пароль и повторяли хэш, чтобы предотвратить атаки грубой силы в случае, если злоумышленник получит хешированное значение.
НЕТ
Не существует известного эффективного способа вернуть хэш sha1 к исходному тексту (так как это односторонняя функция по замыслу). Если вы хотите иметь возможность показывать пользователям их пароль позже, вы должны сохранить его в обратимом методе (шифрование IE, открытый текст). Это все еще, вероятно, плохая идея, попробуйте найти лучший способ сделать это.