2016-08-21 10 views
-2

このコードを実行すると無効なパスワードが返されます。なぜパスワードがハッシュされたものと一致しなかったのですか?phpのpassword_hash()関数が無効なパスワードを取得しています

<?php 
    $passwd = "imad"; 
    $hash = password_hash($passwd,PASSWORD_DEFAULT,['cost'=>10]); 
    echo "$passwd".' :'.$hash."<br/><br/>"; 


    if (password_verify($passwd, $hash,['cost'=>10])) { 
     echo 'Password is valid!'; 
    } else { 
     echo 'Invalid password.'; 
    } 
?> 
+0

ハッシュの外観はどうですか? '$'を含んでいますか? – RamRaider

+3

'もし(password_verify($ passwd、$ hash)){{}}'で十分であれば、検証時に第3引数はありません。 – Ekin

+0

'error_reporting'が有効になっていないか、' display_errors'がオンになっていないか、マニュアルを読んでいないだけです。 ['password_verify'](http://php.net/password-verify)には2つの引数があります。あなたは3つの引数を渡しています。つまり、関数は返されず、代わりにエラーが発生します。 – Sherif

答えて

0

password_verify正確に2つのパラメータを期待しています。

だから、あなただけ行う必要があります。ternary operatorsを使用して

(password_verify($passwd, $hash)) ? : echo "Password is valid!" : echo "Password is invalid." 

if(password_verify($passwd, $hash)) { ... } 

そして、上記のコードはに短縮することができます。


また、error_reportingは、一般的には開発時には良いアイデアです。

ので置く:

ini_set("display_errors", "1"); 
error_reporting(E_ALL); 

あなたのファイルの先頭にあること。

そして、それを生産段階に移すときは、それを取り外してください。

+0

Tnxさん、私の一日を作った:d –

関連する問題