密码验证 bcrypt,似乎无法匹配数据库

Password verify bcrypt, can't seem to match database

我正在尝试使 password_verify 与数据库中的 crypt 密码相匹配,但我遇到了一个问题,它似乎不匹配。

我已经搜索过了,我发现我需要使用最大长度为 255 的 VARCHAR,但仍然不起作用。

代码如下:

if( isset($_POST['bG9n']) && "bG9naW4") {

  $email = $_POST['email'];
  $pass= $_POST['pass'];
if($pass) {
        $crypt = password_hash($pass,PASSWORD_BCRYPT);
        $decrypt = password_verify($pass,$crypt);
    }
    if(password_verify($pass,$crypt)) {
        echo "Sucess"; // It does echo Sucess 
    }
if (!empty($email) && !empty($pass) && filter_var($email,FILTER_VALIDATE_EMAIL) && password_verify($pass,$crypt)) {

    $sql = "SELECT email, pass FROM clientes WHERE email ='$email' AND pass = '$decrypt' ";
    $query = $DB_con->prepare($sql);
    $query->execute();
    $count = $query->rowCount();
        if($count  == 1){
                $_SESSION['email'] = $email;
                $_SESSION['pass'] = $decrypt;
                header("Location: home.php");
        }

        else {

            echo "<BR>Error";

        }

    }

可能很容易修复,但我似乎找不到问题所在。

先谢谢大家了。

这是正常行为。 bcrypt 的哈希值不是确定性的,它因启动而异,因此您无法查询它。

您必须检查它是否匹配,不是通过 mysql,而是通过 php

所以,先从数据库中获取,然后$isVerified = password_verify($pass, $hashFromDB);