crypt()函数没有给出正确的哈希值

时间:2012-10-15 15:24:01

标签: php password-hash

我使用 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';
    }

请参阅并建议任何可能的方法,使其正常工作。

感谢。

1 个答案:

答案 0 :(得分:4)

问题是base64_encode可能会生成一个带有'+'符号的字符串,这被crypt函数视为不正确的盐。

var_dump您的$salt以及$password,您会看到每次+字符用于salt时,crypt函数将返回{{1}字符串 - 失败的标志。

解决这个问题的一种可能方法是用'。'替换所有'+'符号:

'*0'