【问题标题】:Php Password Verify Issues [duplicate]PHP密码验证问题[重复]
【发布时间】:2020-12-26 11:45:31
【问题描述】:

当我尝试执行我的代码时,我收到了无效密码错误。我想提一下,我也在使用相同的 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(); //fetch DB results

if (!empty($row)) { // checks if the user actually exists(true/false returned)
    
    if (password_verify($upassword, $row['password'])) {
        echo 'Password is valid!';
    } else {
        echo 'Invalid password.';
    }


} else {
    echo "Entered data is invalid."; // User login details entered does not match any in DB
}

$statement->close();
}

【问题讨论】:

  • password 列的长度是多少,你从代码中的$password 得到什么值?
  • @Qirel 长度为 Varchar (255)
  • password_verify() 采用未散列的密码和散列密码进行比较。所以使用$upassword = password_hash($_POST['password'], PASSWORD_BCRYPT);意味着你重新散列密码,这将不匹配。
  • @Qirel 看来我迷路了。您能否重写我的代码,以便我可以将存储在数据库中的哈希密码与用户输入进行比较。谢谢。

标签: php authentication password-protection


【解决方案1】:

存储在您的表中的密码是散列版本吗?

verify_password 的第一个参数是纯文本密码,在您的代码中,您对密码进行哈希处理并验证哈希值。

请参阅 php 文档中的此示例

<?php
// See the password_hash() example to see where this came from.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
?>

将您的 verify_password 行更改为

password_verify($_POST['password'], $row['password'])

或者不要一开始就散列

$upassword = $_POST['password'];

【讨论】:

  • 密码存储为“$2y$10$xQnz10jMPYZzt00.zZ8l.OW7cLmhI4lxEpFxDWirRXtxl9mIsJphq”,不带引号。它的原始值为“00000000”,不带引号。因此,当我尝试使用密码“00000000”时,我收到了无效密码错误。
猜你喜欢
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多