1

我正在使用 BCrypt 实现密码散列,这应该很容易使用。但是,当使用哈希密码检查密码时

BCryptHelper.CheckPassword(Password, hashedDBPassword)

这总是返回假。

这是我的哈希类:

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 app, BCrypt.CheckPassword failed but no solution has been found yet。

也许还有其他更好的哈希解决方案?

谢谢

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 回答