Обычный способ хранения пароля - использовать хеш-функцию для пароля, но salt заранее. Важно «засолить» пароль, защитить себя от радужного стола атак.
Итак, ваш стол должен выглядеть примерно так
._______._________________.______________.
|user_id|hash |salt |
|-------|-----------------|--------------|
|12 |adsgasdg@g4wea...|13%!#tQ!#3t...|
| |... |... |
При проверке соответствия данного пароля пользователю необходимо объединить соль с данным паролем и вычислить хеш-функцию строки результата. Если выходные данные хеш-функции соответствуют столбцу hash
- это правильный пароль.
Тем не менее, важно понимать, что идея создания солидного хэша имеет конкретную причину - запретить кому-либо, имеющему доступ к базе данных, знать любой пароль (обратная обработка вывода хеш-функции считается сложной задачей). Например, администратор банка не сможет войти на ваш банковский счет, даже если у него есть доступ ко всем столбцам.
Вам также следует рассмотреть возможность его использования, если вы считаете, что ваши пользователи будут использовать конфиденциальный пароль (например, пароль для своей учетной записи Gmail) в качестве пароля к вашему веб-сайту.
ИМХО, это не всегда функция безопасности, которая необходима. Так что вы должны подумать, хотите ли вы этого.
См. в этой статье для краткого описания этого механизма.
Обновление: Стоит отметить, что для дополнительной защиты от целевой атаки при обращении хэша отдельного пароля вам следует использовать bcrypt , который может быть произвольно сложным для вычисления. (Но если вы действительно не боитесь, что таинственный человек в черном нацелится на вашу конкретную базу данных, я думаю, что sha1 достаточно хорош. Я бы не стал вводить другую зависимость для моего проекта для этой дополнительной безопасности. При этом нет причин не использовать sha1 100 раз, что даст аналогичный эффект).