0

我已经使用thisthis制作了一个密码哈希脚本,我让它正常工作,除了有时 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';
    }

请查看并建议任何可能的方法以使其正常工作。

谢谢。

4

1 回答 1

3

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

var_dump你和你$salt一起$password,你会看到每次+在盐中使用字符时,crypt函数都会返回一个'*0'字符串——失败的标志。

解决它的一种可能方法是用“。”替换所有“+”符号:

$salt = str_replace('+', '.', $salt);
于 2012-10-15T15:47:58.167 回答