-1

これまでの私の理解から (少なくとも私はそう思います)、 password_hash() 関数は、使用中のアルゴリズム、コスト、ソルトに基づいてハッシュを生成します。password_verify は、egpassword_hash($pass, PASSWORD_BCRYPT, array('cost'=>10))から提供された情報を使用して、検証に必要なすべての情報が含まれているため、返された値が true か false かを確認します。

以前使っていた

$SQL_Query = "SELECT * FROM DB_Table WHERE userName = '".$username."'" AND password = $ID;

これはプレーンテキストで保存されているため機能し、true を返す可能性がありますが、論理的には今回は機能しません。

次のような説明で静的パスワードを使用する同様の質問に出くわしました

<?php

$to_verify = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

if (password_verify('rasmuslerdorf', $to_verify)) 
{
    echo 'Password is valid!';

} else 
{
    echo 'Wrong password.';
}

私が理解に苦しんでいる概念は、パスワード入力がその時点でページに知られているのではなく、データベースに保存されている場合、パスワード入力をハッシュ値と照合する方法です? 私は最近、私の愚かなエラーである値の保存に関して助けを得ましたが、これは私が望んでいたほどうまくクリックしていないと思います。

4

2 に答える 2

1

と の例を一緒に見てpassword_hash()くださいpassword_verify()

によって生成されるハッシュ文字列password_hashは自己記述的です。これには、使用されたアルゴリズムとランダム ソルトの両方の表示が組み込まれています。 password_verifyこのすべてについて知っています。最近のパスワードと古いパスワードの両方に対して「正しいことを行う」方法を知っています。

したがって、単純にデータベースにクエリを実行して、このユーザーの(ハッシュ化された ...)パスワードを取得します。次に、password_verify()このハッシュ値がこのパスワード値と一致するかどうかを確認するために使用します。

同時にユーザー名を照会することはできませんAND password。ユーザー名のみを照会し、ハッシュ値を取得し、それを使用password_verify()して確認します。

于 2015-05-04T21:58:49.743 に答える