Я прочитал информацию, предоставленную в PHP Manual Entry для crypt()
, но я все еще не уверен в том, какой формат соли для запуска алгоритма Blowfish.
В соответствии с ручным вводом, я должен использовать '$ 2 $' или '$ 2a $' как начало строки из 16 символов. Однако в приведенном ниже примере они используют гораздо более длинную строку: '$2a$07$usesomesillystringforsalt$
', что указывает на то, что любая строка, которую я предоставляю, будет нарезана и нарезана кубиками для соответствия модели.
Проблема, с которой я сталкиваюсь, на самом деле вызывает алгоритм Blowfish против STD_DES
. Пример:
$foo = 'foo';
$salt = '$2a$' . hash('whirlpool', $foo); // 128 characters, will be truncated
$hash = crypt($foo, $salt);
// $hash = $26HdMTpoODt6
Этот хеш, очевидно, не является вихревым, и на самом деле STD_DES
только с первыми двумя символами соли, которые используются для соли. Однако в примере с руководством по PHP их соль начинается с '$2a$07$
', поэтому, если я добавлю эти три символа в один и тот же код, я получу следующее:
$foo = 'foo';
$salt = '$2a$' . hash('whirlpool', $foo); // 128 characters, will be truncated
$hash = crypt($foo, $salt);
// $hash = $2a$07$b1b2ee48991281a439da2OHi1vZF8Z2zIA.8njYZKR.9iBehxLoIC
Я заметил, что могу предоставить некоторую разницу в символах, которые здесь показаны как '07$
', например, 04$
и 15$
оба работают, но 01$
до 03$
не работают (генерирует пустую строку), а значения, такие как 99$
и 85$
, заставляют его снова вернуться к STD_DES
.
Вопрос:
Каково значение этих трех символов, следующих за строкой '1030 *', которая, как я полагаю в руководстве, указывает функции crypt использовать метод blowfish.
Согласно руководству, '$2a$
' должно быть достаточно, чтобы указать crypt()
использовать метод blowfish; в чем же значение следующих трех символов? Что же тогда является правильным форматом для соли, если эти три символа настолько значимы?