1

我有一个用户输入密码的注册页面,所以我对此密码进行哈希处理,并将其在数据库中进行哈希处理

但是当我尝试登录时,它告诉我密码不匹配,当我回显它时它不匹配,就像我写了一个新密码一样

如何解决这个问题有人可以帮助我吗???

寄存器中的 cryptpass 函数

function cryptPass($input, $rounds = 9)
{
    $salt = "";
    $saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9'));
    for($i = 0; $i<22; $i++)
    {
        $salt  .=$saltChars[array_rand($saltChars)]; 
    }
    return crypt($input, sprintf('$2y$%02d$', $rounds) . $salt);
}
$hashedpass = cryptPass($pass1);    

密码登录功能

function cryptPass($input, $rounds = 9)
{
    $salt = "";
    $saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9'));
    for($i = 0; $i<22; $i++)
    {
        $salt  .=$saltChars[array_rand($saltChars)]; 
    }
    return crypt($input, sprintf('$2y$%02d$', $rounds) . $salt);
}
$hashedpass = cryptPass($pass);   
echo $hashedpass;
4

2 回答 2

1

对存储的密码进行哈希处理时,您的密码盐需要相同。通常,当用户注册/更改他/她的密码时,您的代码会生成随机盐。然后以某种您可以识别的方式将其与散列密码一起存储在数据库中。然后,当需要验证用户的输入时,您可以使用该盐重新散列密码。

于 2013-05-18T23:32:05.917 回答
0

您在散列之前添加到密码中的盐必须每次都相同。

我建议不要生成随机盐,而是创建一个您每次都使用的任意常量。

$salt = '@#$JASasdjbh&*()';

当然,在您自己的脚本中使用它们之前,您应该更改这些字符。

于 2013-05-18T22:43:49.063 回答