Почему хеш генерируется BCrypt недетерминированным

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

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

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

Это засоление ценностей внутри или что-то еще происходит?

введите описание изображения здесь

  • Пожалуйста, обратите внимание, я солю это в моем реальном коде - это всего лишь тест

1 ответ

Решение

Это засоляет ценности внутренне

Ага. bcrypt - это больше, чем необработанная хеш-функция, она включает соль и несколько других битов, которые позволяют проверять хеш без дополнительного ввода:

$2a$12$q6r.MpvzPrUszrWLgaRdlOs04kPcjk0syCDelrzES9O8.UNlHON.u
 ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^
 |  |  \- salt
 |  \---- work factor
 \------- format

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

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