で働いていない:これはVARCHAR(60)との列にMySQLデータベースに格納されてpassword_verify()私はそうのようなpassword_hash使用してパスワードを作成したPHP
$password = password_hash('password123', PASSWORD_DEFAULT);
。私のログインフォームで
、私が使用:
if(password_verify($password, $foundUser->Password){ /*login*/ }
$password
は、ログインフォームから平文入力され
と$foundUser->Password
は、データベースに格納されたハッシュですが、password_verify()
関数は常に戻っています偽です。
echo "Password: {$password} <br>"; echo "Found password: ".$foundUser->Password."<br>";
出力:
Password: password123 Found password: $2y$10$8.ICQHCyCPzS.xygPO4cfuHsHZb6Kuxynn8/uUHOU1.7gY.UhSIXa
はので、私は私は正しいパスワードを入力して取得しています合理的に確信しています
は、私は次のコードを使用して、私の入力をチェックして私のデータベースからの正しいハッシュ
私はthis questionのリンクを見てきましたが、回答はまだありません。 password_verify()がfalseを返す理由は誰にも分かりますか?
マニュアルから:「結果を60文字以上に拡大できるデータベース列に格納することをお勧めします(255文字が良い選択です)」 –
** 'PASSWORD_DEFAULT'は、新しい強力なアルゴリズムがPHPに追加されたので、時間の経過とともに変更されるように設計されています。そのため、この識別子を使用した結果の長さは時間とともに変化する可能性があります。したがって、60文字を超えて拡張できるデータベース列に結果を格納することをお勧めします(255文字は適切な選択肢です)。** - 初心者のために...データベースから得た値が、 'password_hash'によって生成されたものと同じです...? – deceze
...現在のところ、 'PASSWORD_DEFAULT'はBCryptを使用していますが、必ずしも60文字の文字列でなければなりません。 – CD001