Php密码验证问题

21 浏览
0 Comments

Php密码验证问题

当我尝试执行代码时,出现了“无效密码”错误。我想提一下,我在注册时也使用了相同的PASSWORD_BCRYPT函数。但是,当我在登录代码中实现它时,我没有成功。请告诉我我做错了什么,并帮助我修复这个错误。

另一件事是,我输入的是注册时为演示用户使用的相同/正确的密码。以下是登录的代码。

if(isset($_POST['login'])){
$user_name = ($_POST['user_name']);
$upassword = password_hash($_POST['password'], PASSWORD_BCRYPT);
$statement = $db->prepare("SELECT user_name, password, status FROM user_registration WHERE user_name = ?");
$statement->bind_param('s', $user_name);
$statement->execute();
$statement->bind_result($user_name, $password, $status);
$row = $statement->fetch(); //获取数据库结果
if (!empty($row)) { //检查用户是否存在(返回true/false)
    if (password_verify($upassword, $row['password'])) {
        echo '密码有效!';
    } else {
        echo '无效密码。';
    }
} else {
    echo "输入的数据无效。"; //用户登录详细信息与数据库中的任何信息都不匹配
}
$statement->close();
}

0
0 Comments

问题:Php密码验证问题

原因:在代码中将密码进行了哈希处理,然后进行了哈希验证,导致验证失败。

解决方法:参考php文档中的示例,将密码直接传入password_verify函数进行验证。修改verify_password行为password_verify($_POST['password'], $row['password'])。或者在最开始不对密码进行哈希处理,直接将密码赋值给变量$upassword = $_POST['password'];

原始密码为"00000000",经过哈希处理后的值为"$2y$10$xQnz10jMPYZzt00.zZ8l.OW7cLmhI4lxEpFxDWirRXtxl9mIsJphq"。所以当使用密码"00000000"时会出现验证失败的错误提示。

0