2011-06-30 59 views
1

使用BCrypt的C#实现之一来哈希密码并将它们存储到SQL数据库中。但是,当我返回验证的哈希字符串BCrypt生成一个不同的哈希比在数据库中比较。这些盐显然与因子一样。给定相同的盐,字符串和因子,BCrypt生成不同的哈希

以下是我知道

$ 2A $ 12 $室颤/ 1s3MqIzHwnDshyzH/rOYUelofrj4UWv。/ vzWqk4o2K0uwhix7W实际上是 “Qwerty123” 及其存储在被初始化为[nvarchar的](200)的柱。

当我根据实现使用BCrypt.Verify()或BCrypt.CheckPassword()时,我会跟踪它,直到它进行比较,并且它将与前面提到的比较的哈希值为$ 2 a $ 12 $ vF/1s3MqIzHwnDshyzH/rOKVRePZSXFXaIpDv6.IPkbPEoOxZgSEe

如果您仔细看看,可以看到盐分和因子部分是相同的。任何想法可能会造成这种情况?

的明确落实我与可以在这里http://bcrypt.codeplex.com/

我的问题可能与ASP.NET MVC 3 app, BCrypt.CheckPassword failing

+0

如果您在一台服务器上反复BCrypt相同的字符串,您是否继续获得相同的加密版本? – Brad

+0

是使用相同的字符串和盐生成的哈希每次都是相同的。 – GRush

回答

1

问题是输入到Bcrypt。我使用Multiview和MultiViewPanels来收集用户数据(其中包含密码),允许用户验证所有数据,然后在最后一个MultiViewPanel上将用户添加到数据库,并在该过程中进行回发。经过一番研究,我发现密码字段在出于安全原因回传之后不保留其文本属性,并且因为我将txtPassword.text传递给Bcrypt,这就是问题所在。这对我来说是一个新问题。

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其实并不是这里的问题。

相关问题