2017-08-22 101 views
-1

我試圖使password_verify匹配數據庫中的crypt密碼,但我遇到了問題,它似乎不匹配。密碼驗證bcrypt,似乎無法匹配數據庫

我已經搜索了這個,我發現我需要使用最大長度爲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"; 

     } 

    } 

也許是一個簡單的辦法,但我似乎無法找到什麼是錯的。

謝謝大家提前。

+0

我建議你閱讀[文件](http://php.net/password)。這看起來很不對。例如。你怎麼知道password_verify返回一個未加密的密碼我不知道。 –

+1

你會以錯誤的方式去做。你試圖檢查'$ decrypt = password_verify($ pass,$ crypt);'在你的查詢中'AND pass ='$ decrypt''並使用太多的'password_verify()'。 –

回答

1

這是一個正常的行爲。與bcrypt哈希是不確定的,它從啓動到啓動不同,所以你不能查詢它。

您必須檢查它是否通過mysql而不是通過php匹配。

所以,首先從數據庫中獲取它,然後$isVerified = password_verify($pass, $hashFromDB);

+3

請解釋。 –