2017-08-22 23 views
-1

私はpassword_verifyをデータベースの暗号パスワードと一致させようとしていますが、問題があります。一致しないようです。パスワードの確認bcryptデータベースと一致しないようです

私はすでにこれを検索していますが、VARCHARを最大長255で使用する必要があり、まだ動作しないことがわかりました。ここで

はコードです:

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

、その後、データベースからそれを得ます。これはかなり間違っています。例えば。あなたはpassword_verifyがunhashedパスワードを返すという考えにどのようになったのか分かりません。 –

+1

あなたはそれについて間違った方法をしています。クエリ 'AND pass = '$ decrypt''の中で' password decrypt = password_verify($ pass、$ crypt);をチェックし、あまりにも多くの 'password_verify()'を使ってみようとしています。 –

答えて

1

これは正常な動作です。 bcryptのハッシュは決定的ではなく、起動時と起動時が異なるため、クエリできません。

mysqlではなく、phpで一致するかどうかをチェックする必要があります。だから、

、最初に私は、[ドキュメント](http://php.net/password)を読んでお勧めしたい$isVerified = password_verify($pass, $hashFromDB);

+3

説明してください。 –

関連する問題