2017-09-17 3 views
1

これは非常に簡単です。ハッシュされたパスワードを生成して、それを "unhashed"文字列と比較したいと思います。常に無効なパスワードを返します。私は何が欠けていますか?php password_verifyが機能しません

<?php 

// MY CURRENT PHP VERSION IS 7.0.9 

$password = "abc"; 

$options = [ 
    'cost' => 11, 
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), 
]; 
$password_hashed = password_hash($password, PASSWORD_BCRYPT, $options)."\n"; 

if (password_verify($password, $password_hashed)) { 
    echo '<strong>correct password.</strong><br>'; 
} else { 
    echo '<strong>invalid password!</strong><br>'; 
} 


?> 
+3

' "\ n" は;'が最後に。ハッシュされたパスワード文字列の最後に改行を追加します。それを除く。 – Qirel

+3

また、あなた自身の 'salt'を使うことは、PHP 7.0以降で廃止されました。 – Qirel

+0

あなたの返事のために多くのThx。だから自分の塩を使う代わりに私は何をするだろうか? – Melvin

答えて

6

あなたの問題は、ハッシュ化された文字列の最後に改行を追加しているということです。

$password_hashed = password_hash($password, PASSWORD_BCRYPT, $options)."\n"; 
//                  ^
//           Here you add a newline ------' 

つまり、パスワードをハッシュし、ハッシュされた文字列の最後に改行を追加します。 password_verify()によってunhashedされた文字列と比較すると、その改行のため単純に一致しません。問題を解決するために、あなたは...あなたはそれを作る、パスワードをハッシュどこから."\n"を削除する必要が

$password_hashed = password_hash($password, PASSWORD_BCRYPT, $options); 

改行はおそらく、彼らはパスワードをハッシュの例を示しPHPマニュアル、から来ています。残念なことに、それはかなり誤解を招く - 私の意見では、例から削除する必要があります。

最後の注意として、マニュアルから。
塩オプションを警告

はPHP 7.0.0で非推奨になりました。既定で生成される塩を単に使用することが今や好ましい。

関連する問題