Я прочитал информацию, представленную в PHP Manual Entry для crypt()
, но я все еще не знаю формат для соли для запуска алгоритма Blowfish.
Согласно ручному вводу, я должен использовать "$ 2 $" или "$ 2a $" в качестве начала строки из 16 символов. Однако в приведенном ниже примере они используют намного более длинную строку: '$2a$07$usesomesillystringforsalt$
', которая указывает мне, что любая строка, которую я предоставляю, будет нарезана и нарезана кубиками, чтобы соответствовать модели.
Проблема, с которой я сталкиваюсь, фактически вызывает алгоритм Blowfish vs STD_DES
. Пример:
$foo = 'foo';
$salt = '$2a$' . hash('whirlpool', $foo); // 128 characters, will be truncated
$hash = crypt($foo, $salt);
// $hash = $26HdMTpoODt6
Этот хэш, очевидно, не является водоворотом, и на самом деле STD_DES
, причем только первые два символа соли используются для соли. Однако в примере с PHP Manual их соль начинается с '$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
.
Вопрос:
Каково значение этих трех символов, следующих за строкой "$2a$
", которые, как я полагаю в руководстве, инструктируют функцию склепа использовать метод blowfish.
Согласно руководству, "$2a$
" должно быть достаточно, чтобы дать команду crypt()
использовать метод blowfish; каково тогда значение следующих трех персонажей? Каков тогда правильный формат соли, если эти три символа настолько значительны?