函数crypt()不返回PHP 7.0中的哈希值

时间:2017-08-13 15:24:16

标签: php hash bcrypt crypt blowfish

我有类似的东西(从http://www.gregboggs.com/php-blowfish-random-salted-passwords/复制)

        $Blowfish_Pre = '$2a$05$';
        $Blowfish_End = '$';
        $bcrypt_salt = $Blowfish_Pre . $salt . $Blowfish_End;
        $hashed_password = crypt($password, $bcrypt_salt);

        echo $salt . '<br>';
        echo $password . '<br>';
        echo $bcrypt_salt . '<br>';
        echo $hashed_password . '<br>';
        echo "end";

当我测试运行时,结果发现$hashed_password的值与$bcrypt_salt完全相同,而$salt$password和{{1}所有返回值都按预期方式。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

抱歉,这是错误的:&#34; 05 $&#34; in&#34; pre&#34;太过分了。请不要尝试。

手册(http://php.net/manual/en/function.crypt.php)说:

  

CRYPT_BLOWFISH - 河豚用盐调和如下:&#34; $ 2a $&#34;,   &#34; $ 2×$&#34;或者&#34; $ 2y $&#34;,一个两位数的成本参数,&#34; $&#34;,和22个字符   来自字母&#34; ./ 0-9A-Za-z&#34;。

使用这种22焦炭长盐:

echo crypt('secret', '$2a$05$1234567890123456789012$');
$2a$05$123456789012345678901u.97m5mwuxOR3RvRKYm9sasohx5Mnzwq

总是使用随机哈希,上面只是一个例子!

如果你不需要&#34; 2a&#34;河豚的版本,我建议使用以下内容,因为它与crypt()兼容并生成随机盐:

echo password_hash("secret", PASSWORD_BCRYPT);

P.S。:当在手册中阅读这样的内容时,我倾向于建议不要再使用PHP了。他们不能像其他任何理智的API一样抛出异常吗?

  

在salt中使用此范围之外的字符将导致crypt()   返回零长度字符串。