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