echo crypt('test', "$2a$07$");
在 PHP 版本 5.4.16 中生成长哈希,但在 5.6.4 中生成*0
"失败字符串"。
阅读 crypt() 上的 PHP 文档,我仍然不太清楚为什么,尽管 Changelog 提到了返回*1
而不是*0
,具体取决于情况。(http://php.net/manual/en/function.crypt.php)
在这种情况下,*0
被退回的原因是什么?PHP是否超过5.4停止容忍形式$2a$07$
的坏盐?
河豚的定义说你必须在第三个$
之后定义一个字符串。
<?php
echo crypt('test', "$2a$07$mystring");
?>
河豚用盐散列如下:"$2a$"、"$2x$"或"$2y$",一个两位数的成本参数,"$",以及字母表中的 22 个字符"./0-9A-Za-z"
如果未定义该字符串,则会收到错误*0
。
5.6.5 当失败字符串"*0"作为盐时,现在将返回"*1",以便与其他crypt实现保持一致。在此版本之前,PHP 5.6 会错误地返回 DES 哈希。