PHP crypt() 在 5.6.4 版本中返回 *0 失败字符串,但不返回 5.4


PHP crypt() returns *0 failure string in version 5.6.4, but not 5.4,

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 哈希。