Храните в моей БД хешированные пароли, а не оригинальные пароли, верно? так как мне использовать BCrypt.Net.BCrypt?

Каждый раз, когда я использую:

BCrypt.HashPassword(password, 12)

это дает мне другой вывод. Из того, что я прочитал, чтобы проверить детали входа, у меня должен быть сам пароль:

BCrypt.Verify(expectedPassword , hashed);

Так что я запутался: я думал, что я должен хранить в своей БД только хэши, а не сами пароли. Что мне не хватает?

2 ответа

Решение

Вы на 100% правы, когда заявляете:

Я думал, что я должен хранить в своей БД только хэши, а не сами пароли.

Исходя из нашего онлайн-чата, где мы выяснили вопрос, который вы запрашивали, общий процесс выглядит следующим образом:

  • В процессе создания (или изменения) пароля пароль - в виде простого текста - поступает в систему в виде простого текста.
  • Затем он хешируется в памяти.
  • Это значение хеша затем сохраняется в базе данных.

Позже...

  • Когда пользователь желает пройти аутентификацию, он вводит свой пароль.
  • Этот пароль поступает в систему в виде простого текста.
  • Затем он хешируется в памяти.
  • Затем это значение хеша сравнивается с предыдущим хешем, сохраненным в пароле.

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

Стандартно разрешается вводить пароль в виде обычного текста, когда он еще находится в памяти. Теоретически возможно зашифровать его до того, как он достигнет сервера (например, меня не удивит, если существуют процедуры SHA-512, написанные на JavaScript для хеширования паролей перед их отправкой), но это, как правило, выходит за рамки даже выше самые сложные требования безопасности.

В коде

BCrypt.Verify(ожидаемый пароль, хешированный);

Вы используете имя "ожидаемый пароль", и мне интересно, если это указывает на ваше неправильное представление. Это не тот пароль, который вы ожидаете от пользователя. Это простой текстовый пароль, который они пытаются использовать для входа в систему.

2-й параметр hashed - это хешированное значение их "официального" пароля (т.е. пароля, который они зарегистрировали).

Таким образом, "хеширование" хранится в базе данных. "Ожидаемый пароль" - это пароль, который они только что ввели для входа. Вы не сохраняете его.

Другие вопросы по тегам