2016-12-28 6 views
0

password_verifyで大きな問題が発生しました。私のDBにPassword_verifyが正しくチェックされない

列があります:

password: $2y$10$1k72g4qYgd4t5koC5hj8sOit3545GfO5EhaIwVRfIiA2/eC3Hnu5e ('b') 

私は、このパスワードは私の全く異なる2つのcodes.Myコード与えられ、それA手紙等しいことを順番に確認したいときは:

$hash = password_hash('b', PASSWORD_DEFAULT); 
$pass = getPassword($email); 
echo $hash . ", " $pass; 

と、それは私を与える:

$2y$10$oJbeQqGSee.pLcBNxqRzUecoCGc9fin7IF.evDVanN1pjmtIINSD2, 
$2y$10$1k72g4qYgd4t5koC5hj8sOit3545GfO5EhaIwVRfIiA2/eC3Hnu5e 

異なるがあるのはなぜ?

答えて

1

あなたの記憶装置に挿入する前にpassword_hash()を使用する必要があり、その後、あなたが確認したときにpassword_verify()

$pass = getPassword($email); 
$verify = password_verify('b', $pass); 

if ($verify) { 
    // passwords match 
} 
else { 
    // passwords do not match 
} 

を参照してください使用する必要があります:ユーザーが指定していないとき、password_hashがするのでpassword-verifyを詳細

2

ことがありますランダムを生成する。 Saltは、ハッシュする前にパスワードに追加される文字列です。 saltがランダムであるため、同じパスワードを持つ2人のユーザーのデータベースには異なるハッシュが残っています。話題の

グッドサマリは、パスワードが正しいことを確認するためon the wikipedia

を見つけることができ、手動であるため、ランダムな塩のpassword_hashの各使用と異なる場合がありハッシュを、比較するべきではありませんが、むしろ関数を使用するpassword_verify

関連する問題