我使用 this 和 this 制作了密码哈希脚本,我正在使其正常工作,除了某些时候的crypt功能将哈希值设为“* 0”,然后失败。
PHP代码
$password='password';
$salt = '$2y$07$';
$salt .= base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_RANDOM));
$salt .='$$';
$password_hash = crypt($password, $salt)';
echo $password_hash.'<br />';
使用上面我的值为
$salt = '$2y$07$8K3i8rJ7n7bsJA36CfbabQ==$$';
$crypt_password = $password_hash;
$crypt_password = '$2y$07$8K3i8rJ7n7bsJA36CfbabO9ojj2hl61azl8CubJQhRTgla4ICiCVC';
if (crypt($password,$crypt_password)===$crypt_password)
{
echo 'password verified';
}
else{
echo 'password NOT verified';
}
请参阅并建议任何可能的方法,使其正常工作。
感谢。
答案 0 :(得分:4)
问题是base64_encode
可能会生成一个带有'+'符号的字符串,这被crypt
函数视为不正确的盐。
var_dump
您的$salt
以及$password
,您会看到每次+
字符用于salt时,crypt函数将返回{{1}字符串 - 失败的标志。
解决这个问题的一种可能方法是用'。'替换所有'+'符号:
'*0'