2016-05-16 1 views
-6

私が始める前に、私は古いmysql APIが残っていると述べます。クエリでbcrypted passwordを使用するにはどうすればよいですか?

パスワードの作成にこの機能を使用します。

$password = $_POST[password]; 
$passwordhashed = password_hash($password, PASSWORD_DEFAULT); 

はしかし、今、私はこの1つのようなクエリを実行する必要があります。

$query_f = mysql_query("SELECT fiscal FROM list WHERE password='$password'"); 

が、明らかにデータベースにそれがランダム塩で暗号化されますので、私は$passwordを使用することはできません。それで私はどうしますか?

これは私が実際にやっていることではありません。私はあなたに気にかけたくない理由のために、それが可能かどうかを知りたいと思います。

+4

[password_verify](http://php.net/password_verify)の例をご覧ください。通常、あなたはあなたのDBを照会するでしょう。なぜなら、あなたはパスワードを照会しているのですが、それで、password_verifyを使用して、提供されたパスワード(プレーン)とDBから返されたハッシュ値を比較します。 –

+5

** deprecatedおよびas PHP7の削除** mysql_ *機能の使用を中止してください。 PDOに移行し、Prepared Statementの使用を開始します。 –

+0

あなたの質問に答える:いいえ、それは不可能です。毎回 'password_hash'を使うと、PHPは自動的に安全なsaltを生成し、パスワードをハッシュするたびに異なるハッシュを生成します(同じ場合でも)。固有の識別子(ユーザ名や電子メールなど)を使用し、 'password_verify'を使用して、提供された(プレーンな)パスワードが保存されたハッシュ表現と一致するかどうかを調べる必要があります。 –

答えて

2

あなたはしていません。何らかの識別子(ユーザー名や電子メールアドレスなど)でユーザーを探し、パスワードフィールドがpassword_verifyと一致するかどうかを確認します。特に、塩漬けのパスワードハッシュでユーザーを検索することはできません。これは、塩漬けのポイントを無効にします。

+0

また、暗号化されていないランダムな乱数のため、パスワードがあってもハッシュごとにハッシュが変更されます。 –

関連する問題