Скажем, кто-то взломал вашу систему (или обнаружил лазейку в ваших sql-запросах), и вы не хотите, чтобы он знал все пароли.
Таким образом, вы хешируете их перед сохранением.Таким образом, вы можете проверить, в порядке ли пароль, но не выводить пароль из хеша.
Если вы не используете слабый хеш.Если вы наберете только sha1($password)
, вы обнаружите, что добавление в Google хеша часто используемых паролей дает пароль менее чем за 0,1 сек * (но в противном случае вы также можете найти радужные таблицы для всех видов хэшей)
Таким образом, вы хотите добавить «соль», то есть вы генерируете какое-то мусорное значение:
$salt = rand().rand().rand();
, а затем сохраняете
$hash = $salt."-".sha1($salt.$password);
при проверке, вы знаете соль, и выМожно проверить, правильно ли введен пароль, но знание хеша и соли затрудняет восстановление пароля.(если, конечно, у вас нет радужной таблицы с солью)
* это требует некоторого объяснения: однажды я взял большую пользовательскую таблицу и обнаружил, что некоторые хеши появляются несколько раз.Я гуглил самый встречающийся, и он поменялся на computer