Во время обновления с Zend Server CE 5.1 до Zend Server CE 5.5 PHP также получил обновление с 5.3.5 до 5.3.8. После этого перехода функция входа в Zend-приложение, над которым я работаю, неожиданно прервалась.
Пытаясь отладить его, похоже, что реализация crypt()
не отражает руководство по PHP, или я его неправильно понял. Если бы я рискнул предположить, это последнее.
Я использую соль длиной 16 символов как часть более крупной соли, используя SHA256, которая используется в качестве примера в руководстве по PHP.
$password = //string entered at login
$salt = '$5$rounds=250000$1234abcd5678defg$';
После того, как я хэшировал введенный пароль
$hash = crypt($password, $salt);
В качестве возвращаемого значения я получаю строку, подобную этой:
$5$rounds=250000$1234abcd5678$tI.Oiz.YwWjIwT3K.SLU8SwUZ9J0/odBCkbE6t0igeB
Меня сбивает с толку то, что соль из 16 символов, которая является частью большей части ( 1234abcd5678defg выше), теперь усекается до 12 символов.
Это как задумано? Функция crypt()
также, похоже, теперь возвращает другие результаты, чем раньше - это обычно между версиями PHP? Ничто в changelog не предлагает каких-либо радикальных изменений в алгоритмах шифрования.