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

时间:2015-01-22 21:42:39

标签: php crypt php-5.4 php-5.6

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$形式的坏盐?

1 个答案:

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