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$
形式的坏盐?
答案 0 :(得分:7)
Blowfish定义说你必须在第三个$
之后定义一个字符串。
<?php
echo crypt('test', "$2a$07$mystring");
?>
Blowfish用盐进行散列如下:“$ 2a $”,“$ 2x $”或“$ 2y $”,两位数的成本参数“$”,以及字母表中的22个字符“./-图9A-ZA-Z“
如果您没有定义该字符串,则会收到错误*0
。
5.6.5当给出故障字符串“* 0”作为salt时,现在将返回“* 1”以与其他crypt实现保持一致。在此版本之前,PHP 5.6将错误地返回DES哈希。