Каков правильный формат соли blowfish с использованием склепа PHP?

Я прочитал информацию, предоставленную в PHP Manual Entry для crypt() , но я все еще не уверен в том, что формат для соли запускает алгоритм Blowfish.

Согласно ручному вводу, я должен использовать «$ 2 $» или «$ 2a $» в качестве начала строки из 16 символов. Однако в приведенном ниже примере они используют гораздо более длинную строку: « $2a$07$usesomesillystringforsalt$ », которая указывает мне, что любая строка, которую я предоставляю, будет нарезана и нарезана кубиками, чтобы соответствовать модели.

Проблема, с которой я сталкиваюсь, фактически запускает STD_DES Blowfish и 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; каково тогда значение следующих трех персонажей? Что тогда, правильный формат соли, если эти три символа настолько значительны?

Число, следующее за 2a указывает log2 числа раундов для выполнения. Например, 10 означает 1024 раунда. Обычно 10 нормально. Не используйте слишком большие цифры или ваш пароль будет вечно проверяться.

См. Почему BCrypt.net GenerateSalt (31) сразу возвращается? для чего-то связанного. 🙂