2012-02-25 6 views
0

私はphpassのbcrypt機能を使用して自分のサイトのパスワードをハッシュしています。 これは実際には機能しません。 CheckPassword関数と比較しようとすると機能しません。私は、ハッシュを解読するために使用したすべての関数から出てくるすべての文字列を広範囲にデバッグし、bcryptによって生成されたハッシュがかなりランダムであるという結論に達しました。したがって、新しく生成された平文パスワードのハッシュは、自分のデータベース内のハッシュと決して一致しません。本当?もしそうなら、私はそれをどのように機能させるのですか?ソースコードはかなりシンプルです。ユーザパスワードにbcryptを使用

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

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

これらの2行のコードは、同じサーバー上で実行されていますか? phpassはサーバーのPHP設定で利用できない場合、自動的にダウングレードします(つまり、実際にbcryptを使用しません)。 –

答えて

1

編集:問題はあなたが間違った順序を持っている 、パスワード、そして保存されたハッシュを必要とします。

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

Source

この問題は、私が前に(下)言ったように保存されたハッシュは、したがって、あなたの間違った引数の順序は、故障の原因となります、比較するためのパスワードをハッシュする方法を決定するために使用されます。前から

回答:あなたはハッシュを復号化していない

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

ハッシュが決して同じではない理由は、塩が毎回異なるということです。これは、虹のテーブル攻撃から保護するためです。

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

+0

ええ私は私が解読しないことを知っている、私はちょうどいい理由のためにその言葉を使っていた。はい、私は保存されたハッシュをチェックして、それは大丈夫です。 'CheckPassword'を使用したときに結果のハッシュを見ると、比較したハッシュが決して同じではないことが示されます。何が間違っていて、なぜ真のブール値を返さないのか不思議です。 – casraf

+0

答えで更新された場合、あなたの '' CheckPassword''は引数の順序が間違っています。 –

+0

はい!今すぐ動作します。奇妙なことに、サンプルファイルはそれを逆に示しました。どうやら変数がどのように使われているのか誤解されたり誤解されたりしたようです。 – casraf

関連する問題