Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Длина соли и длина выходной стройки алгоритма blowfish

#blowfish #php #криптография #шифрование


Здравствуйте. В мануале php сказано, что Blowfish-шифрование использует соль след.
формата: "$2a$", весовой параметр из двух цифр, "$" и 22 цифры из алфавита "./0-9A-Za-z"
. Но на деле вместо 22 у меня почему-то используется только 21 символ.
$var = "1111111111111111111112";//22-й символ помечен двойкой

echo strlen($var);//выводит 22

echo crypt("12345", "$2a$11$".$var);// выводит $2a$11$111111111111111111111uDWduZDJM79lPV0duPxKCR2XEmS5ly2q

Как видно 22-й символ обрезался и не попал в соль.
Вопрос1: Как объяснить выше описанное поведение?
Вопрос2: У меня на php длина выходной строки (хэша с солью) всегда равна 60 байт
(ну или 60 символов латинского алфавита). Это общий стандарт? стандарт php? Если да,
то где описан?
Спасибо.    


Ответы

Ответ 1



Соль задается из алфавита "./0-9A-Za-z" (64 символа), т.е. каждый символ представляет из себя 6 бит. Это напоминает кодировку BASE64. Вы задаете 22 символа это 22*6 = 132 бита. Для Blowfish соль используется 128 бит из-за этого последние 4 бита не используется. Когда выводится результат, то 128 бит также дополняются 4 нулевыми битами, т.е. от последнего символа остается только 2 старших бита. В вашем примере: 2 (111000) -> u(110000), т.е. последний символ Вы можете задавать любой с точность до 2-х старших битов и это не будет влиять на хэш.

Комментариев нет:

Отправить комментарий