#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-х старших битов и это не будет влиять на хэш.
Комментариев нет:
Отправить комментарий