2

BCrypt の C# 実装の 1 つを使用して、パスワードをハッシュし、SQL データベースに格納します。ただし、ハッシュ文字列に対して検証に戻ると、BCrypt は比較対象のデータベースとは異なるハッシュを生成します。因子と同様に、塩は目に見えて同じです。

これが私が知っていることです

$2a$12$vF/1s3MqIzHwnDshyzH/rOYUelfrj4UWv./vzWqk4o2K0uwhix7W は実際には「Qwerty123」であり、[nvarchar] (200) に初期化された列に格納されます。

実装に応じて BCrypt.Verify() または BCrypt.CheckPassword() を使用する場合、比較を行う直前までトレースし、前述のハッシュと比較しようとしているハッシュは $2a$12$vF です。 /1s3MqIzHwnDshyzH/rOKVrePZSXFXaIpDv6.IPkbPEoOxZgSEe

よく見ると、塩と因子の部分が同じであることがわかります。何がこれを引き起こしているのでしょうか?

私が取り組んでいる明示的な実装は、ここにありますhttp://bcrypt.codeplex.com/

私の質問は、ASP.NET MVC 3 アプリ、BCrypt.CheckPassword の失敗に関連している可能性があります

4

2 に答える 2

2

テストの提案

private void FindWhatsFailing(string password) //password = Whatever you're passing in to verify BCrypt is working
{
  const string expectedpassword = "Qwerty123";
  if(expectedpassword != password)
  {
      Debug.WriteLine("My password isn't what I thought it was");
      return;
  }
  string hashed = BCrypt.HashPassword(expectedpassword , BCrypt.GenerateSalt(12));
  if(!BCrypt.Verify(expectedpassword , hashed))
  {
     Debug.WriteLine("Something is wrong with BCrypt");
     return;
  }

  /// ... Test hashing password, compare to hash of expectedpassword, verify password against hash of itself and expectedpassword

 Debug.WriteLine("Everything worked, maybe the database storage is off?");
}

この例で Bcrypt.Verify が機能しない場合、何が問題なのかわかりませんが、実際には Bcrypt が問題ではないと思います。

于 2011-07-01T00:00:04.943 に答える
1

問題は Bcrypt への入力でした。Multiview と MultiViewPanels を使用してユーザー データ (パスワード) を収集し、ユーザーがすべてのデータを確認できるようにしてから、最後の MultiViewPanel でユーザーを DB に追加し、そのプロセスでポストバックがありました。いくつかの調査の結果、セキュリティ上の理由からポストバック後にパスワードフィールドがテキストプロパティを保持しないことがわかりました.txtPassword.textをBcryptに渡していたため、これが問題でした. これは、私が調べなければならない新しい問題です。

于 2011-07-01T16:02:40.110 に答える