iamFake
Mind Of Liberty
Здравствуйте.
Столкнулся с непонятным поведением функции crypt:
в результате я получаю вот такой хеш
$2y$15$f3a6d962b16962451072fuDG5OMnGompPuRjK.uq9NHCqjRHhTNbe
Данный хеш содержит также ранее сгенерированную соль... кроме её последнего символа (цифра 7), т.е. "как бы" опускает её в выводе, но при проверке результаты совпадают.
Если последнюю цифру убрать(т.е. соль становится 21 символ, а не 22) - "исходная соль" и "получаемая" становятся идентичны, но результат хеширования строки разный:
Если соль до 20 включительно или 22 символа - все отлично, но при 21 символе "косяк"...
Из документации знаю, что надо 22 символа, но если скажем поставить 10 символов - то функция сама "добьет" соль до 21 символа "баксами" (символ $), но если я ей отдаю 21 то поведение отличается от ожидаемого. Получается это баг?
php 5.4.4 linux
Столкнулся с непонятным поведением функции crypt:
PHP:
$salt = '$2y$15$f3a6d962b16962451072f7';
$hash = crypt('Some string', $salt);
$2y$15$f3a6d962b16962451072fuDG5OMnGompPuRjK.uq9NHCqjRHhTNbe
Данный хеш содержит также ранее сгенерированную соль... кроме её последнего символа (цифра 7), т.е. "как бы" опускает её в выводе, но при проверке результаты совпадают.
Если последнюю цифру убрать(т.е. соль становится 21 символ, а не 22) - "исходная соль" и "получаемая" становятся идентичны, но результат хеширования строки разный:
PHP:
$str = 'Some string';
$salt = '$2y$15$f3a6d962b16962451072f';
$hash1 = crypt($str, $salt); //получаем хеш
$hash2 = crypt($str,$hash1);//проверяем
// $hash1 = $2y$15$f3a6d962b16962451072f.V6V20R/1FV9zVIviykwPI0Cw4NgAi8y
// $hash2 = $2y$15$f3a6d962b16962451072f.58loOt/0wdW2lJ.hNYoCkogpaYXy4wC
Из документации знаю, что надо 22 символа, но если скажем поставить 10 символов - то функция сама "добьет" соль до 21 символа "баксами" (символ $), но если я ей отдаю 21 то поведение отличается от ожидаемого. Получается это баг?
php 5.4.4 linux