BCrypt生成不同的哈希,给出相同的盐,字符串和因子

时间:2011-06-30 20:41:12

标签: c# asp.net hash passwords bcrypt

使用BCrypt的一个C#实现来散列密码并将它们存储到SQL数据库中。但是,当我返回验证哈希字符串时,BCrypt会生成与数据库中要比较的哈希值不同的哈希值。盐与这些因素明显相同。

这就是我所知道的

$ 2a $ 12 $ vF / 1s3MqIzHwnDshyzH / rOYUelofrj4UWv./ vzWqk4o2K0uwhix7W实际上是“Qwerty123”并且存储在一个初始化为[nvarchar](200)的列中。

当我根据实现使用BCrypt.Verify()或BCrypt.CheckPassword()时,我会跟踪它直到它进行比较之前,它要与之前提到的哈希相比的哈希是$ 2a $ 12 $室颤/ 1s3MqIzHwnDshyzH / rOKVRePZSXFXaIpDv6.IPkbPEoOxZgSEe

如果仔细观察,可以看到盐和因子部分是相同的。知道是什么导致了这个吗?

我正在使用的显式实现可以在http://bcrypt.codeplex.com/

找到

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

有关

2 个答案:

答案 0 :(得分: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实际上不是问题。

答案 1 :(得分:1)

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