PHP crypt () с sha256 в Zend Server CE 5.5 усекает предоставленную соль - PullRequest
5 голосов
/ 22 сентября 2011

Во время обновления с 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 не предлагает каких-либо радикальных изменений в алгоритмах шифрования.

1 Ответ

2 голосов
/ 20 октября 2011

Это ответ, который я получил от Zend:

Спасибо за отзыв.Проблема, о которой вы сообщили, считается ошибкой.Разработчики предоставят исправление, которое будет включено в один из следующих выпусков продукта.

...