Asp.net mvc 4 BCryptHelper.CheckPassword始终返回false

Asp.net mvc 4 BCryptHelper.CheckPassword始终返回false,asp.net-mvc-4,bcrypt,string-hashing,Asp.net Mvc 4,Bcrypt,String Hashing,我正在使用BCrypt实现密码散列,这应该非常简单。 但是,当使用哈希密码检查密码时 BCryptHelper.CheckPassword(Password, hashedDBPassword) 这总是返回false 这是我的hasher类: public static class BCryptHasher { public static string EncryptPassword(string password) { var

我正在使用BCrypt实现密码散列,这应该非常简单。 但是,当使用哈希密码检查密码时

BCryptHelper.CheckPassword(Password, hashedDBPassword)
这总是返回false

这是我的hasher类:

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是否正确。 这个问题的其他案例并不多,所以一定是我做错了什么

我在这里发现了同样的问题:但还没有找到解决办法

也许还有其他更好的散列解决方案


谢谢

也许问题不在散列本身,也许是你在数据库中存储密码并在后记之类的东西中检索密码的方式

我将采取的第一步是编写一个单元测试来检查该类的功能

[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);
    }
}

如果这个问题通过了,那么问题就在代码的其他地方,因此您可以继续测试其他东西,直到找到问题为止

非常感谢。问题是出于某种原因,我将哈希存储为nchar()。将此更改为char(),效果很好!我不明白的是为什么。如果我理解正确,nchar()应该比char()接受更多的字符。。