我有类似的东西(从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}所有返回值都按预期方式。我该如何解决这个问题?
答案 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() 返回零长度字符串。