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

use*_*438 4 php crypt php-5.4 php-5.6

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$?

Ren*_*hle 7

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

<?php
echo crypt('test',  "$2a$07$mystring");
?>
Run Code Online (Sandbox Code Playgroud)

Blowfish用盐进行散列如下:"$ 2a $","$ 2x $"或"$ 2y $",两位数的成本参数"$",字母表中的22个字符"./0-9A-Za -z"

如果不定义该字符串,则会出现错误*0.

5.6.5当给出故障字符串"*0"作为salt时,现在将返回"*1"以与其他crypt实现保持一致.在此版本之前,PHP 5.6将错误地返回DES哈希.