1

私は BCrypt を使用してパスワード ハッシュを実装しています。これは非常に簡単に使用できるはずです。ただし、パスワードがハッシュ化されたパスワードに対してチェックされる場合、

BCryptHelper.CheckPassword(Password, hashedDBPassword)

これは常に false を返します。

ここに私のハッシュクラスがあります:

public static class BCryptHasher
    {
        public static string EncryptPassword(string password)
        {
            var passwordToHash = password;
            var hashedPassword = BCryptHelper.HashPassword(passwordToHash, BCryptHelper.GenerateSalt(6));

            return hashedPassword;
        }

        public static bool CheckPasswordMatch(string userPassword, string hashedDBPassword)
        {
            return BCryptHelper.CheckPassword(userPassword, hashedDBPassword);
        }
    }

パスワードと hashedPassword が正しいかどうかを確認するためにデバッグしました。この問題の他の多くのケースは存在しないので、私が間違っていることがあるに違いありません。

ここで同じ質問を見つけました: ASP.NET MVC 3 アプリ、BCrypt.CheckPassword が失敗していますが、解決策はまだ見つかりません。

たぶん、ハッシュのための他のより良い解決策がありますか?

ありがとう

4

1 に答える 1

2

おそらく、問題はハッシュ自体にあるのではなく、パスワードをデータベースに保存し、後から取得する方法などに問題があるのか​​もしれません。

最初のステップは、そのクラスの機能を確認するための単体テストを作成することです

[TestClass]
public class BCryptHasherTest
{
    [TestMethod]
    public void check_hashing_works_for_valid_password()
    {
        string password = "myDummyPassword!";
        string hashedPassword = BCryptHasher.EncryptPassword(password);

        var passwordsMatch = BCryptHasher.CheckPasswordMatch(password, hashedPassword);      
        Assert.IsTrue(passwordsMatch);
    }
}

これがパスした場合、問題はコードの別の場所にあるため、問題が見つかるまで他のことをテストできます。

于 2014-04-03T10:15:16.397 に答える