Хеш BCrypt строка выглядит следующим образом:
$2a$10$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm
$==$==$======================-------------------------------
Где
2a
: идентификатор алгоритма (BCrypt,Пароль в кодировке UTF8, нулевое окончание) 10
: коэффициент стоимости (2 10
= 1024 раунда) Ro0CUfOqk6cXEKf3dyaM7O
: соль OpenBSD-Base64 (22 символа, 16 байт) hSCvnwM9s4wIX9JeLapehKK5YdLxKcm
: хэш в кодировке OpenBSD-Base64 (31 символ, 24 байта)
Редактировать : я простозаметил, что эти слова подходят точно.Я должен был поделиться:
$2a$10$TwentytwocharactersaltThirtyonecharacterspasswordhash
$==$==$======================-------------------------------
BCrypt делает создает 24-байтовый двоичный хэш, используя 16-байтовую соль.Вы можете хранить бинарный хеш и соль так, как вам нравится;ничто не говорит, что у вас есть для кодирования base-64 в строку.
Но BCrypt был создан парнями, которые работали над OpenBSD. OpenBSD уже определяет формат файла паролей:
$ [HashAlgorithmIdentifier]
$ [AlgorithmSpecificData]
Это означаетчто «спецификация bcrypt» неразрывно связана с форматом файла паролей OpenBSD.И всякий раз, когда кто-либо создает "bcrypt hash" , они всегда преобразуют его в строку ISO-8859-1 в формате:
$ 2a
$ [Cost]
$ [Base64Salt][Base64Hash]
Несколько важных моментов:
2a
- идентификатор алогитма - 1: MD5
- 2: ранний bcrypt, из-за которого возникла путаница по поводу того, какие пароли кодирования находятся в (устаревшем)
- 2a: текущий bcrypt, который указывает пароли как UTF-8закодированный
- Стоимость - это коэффициент стоимости, используемый при вычислении хэша.Текущее значение равно 10, что означает, что внутренняя настройка ключа выполняется через 1024 раунда
- 10: 2 10 = 1024 итерации
- 11:2 11 = 2048 итераций
- 12: 2 12 = 4096 итераций
алгоритм base64, используемыйфайл паролей OpenBSD отличается от кодировки Base64, которую используют все остальные ;у них есть свои собственные:
Regular Base64 Alphabet: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
BSD Base64 Alphabet: ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
Таким образом, любые реализации bcrypt не могут использовать любую встроенную или стандартную библиотеку base64
Вооруженные этим знаниемТеперь вы можете проверить пароль correctbatteryhorsestapler
по сохраненному хешу:
$2a$12$mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km