0

phpassのbcrypt機能を使用して、サイトのパスワードをハッシュしています。さて、それは実際には機能しません。関数と比較しようとしてもCheckPassword機能しません。ハッシュを復号化するために使用したすべての関数から出てくるすべての文字列の大規模なデバッグを行い、bcryptによって生成されたハッシュはかなりランダムであるという結論に達しました。したがって、新しく生成されたプレーンテキストパスワードのハッシュは、私のデータベースのハッシュと一致することはありません。本当?もしそうなら、どうやってそれを機能させるのですか?ソースコードはかなり単純です。

// when creating user 
<db insert code>$hash->HashPassword($_POST['password']);

// when logging in
return $hash->CheckPassword($user->password, $_POST['password']);
4

1 に答える 1

1

編集:問題は、順序が間違っていることです。パスワードが必要で、次に保存されているハッシュが必要です。

$check = $hasher->CheckPassword($password, $stored_hash);

ソース

これは重要です。前に(以下で)説明したように、保存されたハッシュは、比較するパスワードをハッシュする方法を決定するために使用されるため、引数の順序を間違えると失敗します。

以前からの回答:

ハッシュを復号化するのではなく、同じ方法で比較可能なデータをハッシュすることによってハッシュをチェックします。BCryptハッシュにはハッシュ、ソルト、ラウンド数が含まれているため、これをチェックしても問題はありません。

ハッシュが同じになることがない理由は、塩が毎回異なるためです。これは、レインボーテーブル攻撃から保護するためです。

私の知る限り、あなたのチェックは健全です。問題は他の場所にあるに違いありません。$user->password実際にハッシュが完全に含まれていると思いますか?BCryptハッシュは60文字なので、切り捨てられていないことを確認してください。

于 2012-02-25T16:12:50.743 に答える