Во-первых: общий подход теперь заключается в том, чтобы хранить соленый хэш пароля вместо самого обычного текстового пароля (предпочтительнее SHA-1 и лучший алгоритм хеширования, избегайте MD5, потому что он больше не безопасен).Когда пользователь входит в систему, вы пересчитываете хэш входной строки, а затем сравниваете его со строкой, хранящейся в базе данных.
РЕДАКТИРОВАТЬ: почему вы не должны использовать шифрование для пароля?Потому что, когда злоумышленник знает ключ шифрования, все ваши пароли будут открыты (это очень плохо).Если вы используете хеш, он просто может угадать один за другим (и это не легко).В противном случае алгоритмы хеширования, как правило, быстрее, чем шифрование, вы выиграете в производительности.
РЕДАКТИРОВАТЬ: почему вы должны хранить соленый хеш, а не хеш?Поскольку алгоритмы хеширования гарантированы, что если вы хешируете одинаковые строки, результат будет одинаковым.Это может привести к проблеме, заключающейся в том, что, когда злоумышленник увидит те же значения хеш-функции, он может догадаться , что тексты были одинаковыми, и это дает ему возможность получить исходный пароль.
Соль означает, что помимо исходного текста, вы помещаете некоторый случайный текст, и, следовательно, две идентичные строки будут генерировать разные значения хеша
Взгляните на это: http://www.obviex.com/samples/hash.aspx
В случае, если пользователь забыл свой пароль, вы можете использовать функцию сброса пароля, которую используют многие сайты:
- Пользователь запрашивает сброс пароля
- Письмо содержитна зарегистрированный адрес электронной почты будет отправлена специальная ссылка (включая секретный токен / ПИН-код), позволяющая пользователю сбросить свой пароль.
- Случайно созданный пароль будет отправлен пользователю снова, после чего он сможет войти и изменитьего пароль.
ОБНОВЛЕНИЕ 14 мая 2012 г .: Ответ кажется старым и не совсем верным.Люди переходят на более безопасный алгоритм хеширования-шифрования для хранения пароля.Одним из известных решений сейчас является bcrypt, а другим (новым и многообещающим) является scrypt.
Преимущество такого шифрования?Они медленные!Гораздо медленнее, чем алгоритм хеширования.Благодаря мощным графическим процессорам (например, CUDA от nVidia) взломать значение хеш-функции теперь невозможно, а медлительность может усложнить взлом этого шифрования.
Подробнее о bcrypt можно узнать по адресу:http://codahale.com/how-to-safely-store-a-password/
Второе: вы должны разделить таблицу пользователей (содержит профили пользователей, такие как полное имя, DoB, адрес, ...) и таблицу логинов (которая содержит имя пользователя и пароль, а также некоторые специальные атрибуты).).Это приведет к улучшению управления и уменьшит риск раскрытия конфиденциальной информации