4

echo crypt('test', "$2a$07$");在 PHP 版本 5.4.16 中产生长哈希,但*0在 5.6.4 中产生“失败字符串”。

阅读 crypt() 上的 PHP 文档,我仍然不太清楚为什么,尽管 Changelog 提到了*1被返回而不是*0取决于情况。( http://php.net/manual/en/function.crypt.php )

*0在这种情况下被退回的原因是什么?PHP 过去 5.4 是否停止容忍表单的坏盐$2a$07$

4

1 回答 1

7

Blowfish 定义说你必须在第三个之后定义一个字符串$

<?php
echo crypt('test',  "$2a$07$mystring");
?>

使用盐的河豚散列如下:“$2a$”、“$2x$”或“$2y$”、两位数的成本参数、“$”和字母表中的 22 个字符“./0-9A-Za” -z"

当您不定义该字符串时,您会收到一个错误*0

5.6.5 当失败字符串“*0”作为盐给出时,现在将返回“*1”以与其他加密实现保持一致。在此版本之前,PHP 5.6 会错误地返回 DES 哈希。

于 2015-01-22T22:39:23.137 回答