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

时间:2017-08-22 10:09:52

标签: php sql bcrypt password-encryption

我正在尝试使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";

        }

    }

可能是一个简单的修复,但我似乎无法找到错误。

提前感谢大家。

1 个答案:

答案 0 :(得分:1)

这是正常行为。使用bcrypt的哈希不是确定性的,它从启动到启动都不同,因此您无法查询它。

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

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