echo crypt('test', "$2a$07$");
создает длинный хеш в PHP версии 5.4.16, но выдает «строку ошибки» *0
в 5.6.4.
Читая документы PHP по crypt (), я до сих пор не совсем понимаю, почему, хотя в журнале изменений упоминается *1
возвращается вместо *0
в зависимости от обстоятельств. (http://php.net/manual/en/function.crypt.php)
В чем причина *0
возвращается в этом случае? Прекратил ли PHP версии 5.4 терпеть дурную соль формы? $2a$07$
?
Определение Blowfish говорит, что вы должны определить строку после третьего $
,
<?php
echo crypt('test', "$2a$07$mystring");
?>
Хэширование Blowfish с солью выглядит следующим образом: «$ 2a $», «$ 2x $» или «$ 2y $», двухзначный параметр стоимости, «$» и 22 символа из алфавита »./0-9A-Za -z»
Когда вы не определяете эту строку, вы получаете ошибку *0
,
5.6.5 Когда в качестве соли указана строка ошибки «* 0», теперь будет возвращаться «* 1» для согласованности с другими реализациями шифрования. До этой версии PHP 5.6 некорректно возвращал хэш DES.
Других решений пока нет …