Прежде всего: не используйте MD5: он недостаточно силен.
Отличное предложение от @Shaggy Frog, используйте bycrypt.Эти сообщения должны помочь вам:
https://stackoverflow.com/questions/2299434/bcrypt-implementation-in-javascript
Нужно ли хранить соль с помощью bcrypt?
Реализация JSBcrypt в Google Code
См. bCrypt JavaDoc .
Что вы будете делать на сервере, когда кто-то сохранит пароль:
BCrypt.hashpw(plain_password, salt);
Когда кто-то пытается войти:
if(BCrypt.checkpw(password_typed_by_user, stored_hash)
{
//itmatches.. log him/her in.
}
Что вы можете сделать, это использовать имя пользователя (или, возможно, несколько букв из имени пользователя) для соли, так что вам не нужносохраните его где-нибудь тоже.
Когда пароль изменится , вам нужно снова взять пароль (на сервере) в виде простого текста и снова его хешировать, как вы делали это при первоначальном сохранении.Если вы думаете о поиске, нет никакого способа, это точка хеширования.Как и большинство веб-сайтов, вы можете изменить пароль на несколько случайных чисел, а затем отправить его по электронной почте на запрошенный адрес.