哈希变量在password_verify()php中不起作用

时间:2017-04-25 14:06:09

标签: php mysql password-hash

我使用.custom-checkbox .custom-control-indicator { border-radius: .25rem; } 删除了密码,并使用password_hash()

进行验证

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

password_verify();

但是当我从MySQL调用该值时,当我把它放在这个函数中时,该值为false,我为值创建了echo,值为true,但我不知道为什么当我把它放错时在$hash = '$2y$10$lKwHxxc1YJI01ftNe33pcOvddAVrLd0GHwb3Ya3eqQJ2HxycpHjpO';

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

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';
    }
}

1 个答案:

答案 0 :(得分:3)

这里似乎有两个问题。来自your comment we found that ...

  1. 您在对密码进行哈希处理之前使用了mysqli_real_escape_string()。在插入密码之前,不应该修改密码,保持密码清洁。如果密码包含例如单引号,则此功能可能会更改密码。
  2. 在插入之前你已经\n与哈希相连,而在比较时,它没有那个。在插入此数据时对密码进行散列处理时需要将其删除。
  3. 这些需要更正(real_escape()不应该在密码上,并且删除换行符),并且在完成这些更正后再次插入密码。

    除此之外,

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

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

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

    请参阅Cleansing User Passwords