散列变量在 password_verify () php 中不起作用

hash variable not work in password_verify () php

我使用 password_hash() 散列密码,并使用 password_verify();

进行验证

当我直接在变量中写入散列值时,值为 True

$hash = 'y$lKwHxxc1YJI01ftNe33pcOvddAVrLd0GHwb3Ya3eqQJ2HxycpHjpO';

但是当我从 MySQL 调用值时,当我把它放在这个函数中时,该值是 false ,我对该值进行回显并且该值是 true ,但我不知道为什么是 false当我把它放在 password_verify();

我查找了之前所有关于此问题的问题,但没有找到任何答案,这是我的代码

if(isset($_POST['submit'])=="Log In") {
    $password = 'aliali12';
    $sql = mysqli_query($con, "SELECT * FROM users WHERE user_id = 1");
    $hashed_pass = mysqli_fetch_assoc($sql);
    if (password_verify("$password",$hashed_pass['user_pass'])){
        echo "Correct Password";
    }  else {
        echo 'There are some wrong';
    }
}

编辑:

这是用于对密码进行哈希处理的代码:

$password = mysqli_real_escape_string($con, $_POST['changePassword']); 
$hash = password_hash("$password", PASSWORD_BCRYPT)."\n";

这里似乎有两个问题。来自 ...

  1. 您在对密码进行哈希处理之前使用了 mysqli_real_escape_string()。永远不要在插入密码之前修改密码,保持密码干净。如果密码包含例如单引号,此功能可能会更改密码。
  2. 在插入哈希之前,您已将 \n 连接到哈希,比较时,它没有。在插入此数据时散列密码时需要将其删除。

这些需要更正(real_escape() 不应该出现在密码上,并且换行符已删除),并在进行这些更正后再次插入密码。


除此之外,

if(isset($_POST['submit'])=="Log In") {

不是你想的那样。它在技术上是可行的,因为它会将布尔值与真值进行比较(因此如果设置为 true == true,否则为 false == true)。它应该只是

if (isset($_POST['submit'])) {