Как хранить пароли в таблице базы данных - PullRequest
2 голосов
/ 27 февраля 2012

Я разрабатываю приложение на C #, в котором мне нужно хранить информацию для входа пользователей, включая их пароли, в таблицу базы данных.Мне было интересно, что это приличный способ сделать это.

Я знаю, что это ужасная идея хранить пароли в виде открытого текста.

Я думал о шифровании паролей, а затем их сохранении.После этого каждый раз, когда пользователи вводят свои пароли, я могу зашифровать их ввод и сравнить этот зашифрованный ввод с тем, который уже находится в базе данных.Мой план состоит в том, чтобы использовать хорошую функцию для шифрования ...

Ответы [ 2 ]

5 голосов
/ 27 февраля 2012

Я думаю, что обычной тактикой является создание хэша пароля с использованием чего-то вроде SHA-256 и сохранение его в базе данных.Затем для входа в систему вы хэшируете все, что вводит пользователь, и сравниваете его с тем, что находится в базе данных.

Эта система означает, что ваше «шифрование» является одним из способов.Вы не можете восстановить пароль, используя хэш пароля.Обратите внимание, что это имеет последствия для удобства использования.В частности, вы не можете отправить пользователям их пароль.Вы можете сбросить только пароли.

Еще одно усовершенствование - соль пароль перед его хэшированием.Это предотвращает класс атак с участием радужных столов.Вы почти наверняка должны сделать это, а также хешировать пароль.

Как уже упоминали другие люди, также важно повторить это несколько раз, чтобы предотвратить атаки методом перебора.

5 голосов
/ 27 февраля 2012

Никогда не храните пароль. Сохраните хеш пароля.

Обратите внимание, что это , а не шифрование. Хеширование и шифрование связаны, но они не совпадают.

Лучшее, что вы можете сделать, это использовать стандартную функцию хеширования паролей, такую ​​как bcrypt или pbkdf2. Не изобретай велосипед.

Эта статья содержит отличное описание того, как надежно хранить пароли.

...