使用地穴和河豚散列密码

时间:2013-05-18 22:34:04

标签: php mysql passwords

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

但是当我尝试登录时,它给我的密码不匹配,当我回应它时,它与我写的新密码不匹配

如何解决这个问题任何人都可以帮助我???

寄存器中的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);    

登录时的crypt函数

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;

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

在散列之前添加到密码的salt必须是相同的 时间。

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

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

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