Храните в моей БД хешированные пароли, а не оригинальные пароли, верно? так как мне использовать BCrypt.Net.BCrypt?
Каждый раз, когда я использую:
BCrypt.HashPassword(password, 12)
это дает мне другой вывод. Из того, что я прочитал, чтобы проверить детали входа, у меня должен быть сам пароль:
BCrypt.Verify(expectedPassword , hashed);
Так что я запутался: я думал, что я должен хранить в своей БД только хэши, а не сами пароли. Что мне не хватает?
2 ответа
Вы на 100% правы, когда заявляете:
Я думал, что я должен хранить в своей БД только хэши, а не сами пароли.
Исходя из нашего онлайн-чата, где мы выяснили вопрос, который вы запрашивали, общий процесс выглядит следующим образом:
- В процессе создания (или изменения) пароля пароль - в виде простого текста - поступает в систему в виде простого текста.
- Затем он хешируется в памяти.
- Это значение хеша затем сохраняется в базе данных.
Позже...
- Когда пользователь желает пройти аутентификацию, он вводит свой пароль.
- Этот пароль поступает в систему в виде простого текста.
- Затем он хешируется в памяти.
- Затем это значение хеша сравнивается с предыдущим хешем, сохраненным в пароле.
Важно отметить, что для данного алгоритма хеширования две одинаковые строки всегда будут хэшировать одинаковые значения, поэтому это сравнение безопасно.
Стандартно разрешается вводить пароль в виде обычного текста, когда он еще находится в памяти. Теоретически возможно зашифровать его до того, как он достигнет сервера (например, меня не удивит, если существуют процедуры SHA-512, написанные на JavaScript для хеширования паролей перед их отправкой), но это, как правило, выходит за рамки даже выше самые сложные требования безопасности.
В коде
BCrypt.Verify(ожидаемый пароль, хешированный);
Вы используете имя "ожидаемый пароль", и мне интересно, если это указывает на ваше неправильное представление. Это не тот пароль, который вы ожидаете от пользователя. Это простой текстовый пароль, который они пытаются использовать для входа в систему.
2-й параметр hashed - это хешированное значение их "официального" пароля (т.е. пароля, который они зарегистрировали).
Таким образом, "хеширование" хранится в базе данных. "Ожидаемый пароль" - это пароль, который они только что ввели для входа. Вы не сохраняете его.