BCrypt在给定相同salt、字符串和因子的情况下生成不同的哈希

本文关键字:情况下 哈希 字符串 salt BCrypt | 更新日期: 2023-09-27 18:00:54

使用BCrypt的一个C#实现对密码进行散列并将其存储到SQL数据库中。然而,当我返回以根据哈希字符串进行验证时,BCrypt会生成与数据库中要比较的哈希不同的哈希。盐和因子明显相同。

以下是我所知道的

$2a$12$vF/1s3MqIzHwnDshyzH/rOYUelofrj4UWv/vzWqk4o200uwhix7W实际上是"Qwerty123",它存储在初始化为[nvarchar](200(的列中。

当我使用BCrypt时。Verify((或BCrypt。CheckPassword((取决于实现,我跟踪它,直到它进行比较之前,它将要与前面提到的哈希进行比较的哈希是$2a$12$vF/1s3MqIzHwnDshyzH/rOKVRePZSXFXaIpDv6.IPkbPEoOxZgSEe

如果你仔细观察,你可以看到盐和因子部分是相同的。知道是什么原因造成的吗?

我正在使用的明确实现可以在这里找到http://bcrypt.codeplex.com/

我的问题可能与ASP有关。NET MVC 3应用程序,BCrypt。CheckPassword失败

BCrypt在给定相同salt、字符串和因子的情况下生成不同的哈希

测试的建议

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。验证在这个例子中对你来说不起作用,我不知道出了什么问题,但我猜Bcrypt实际上不是问题所在。

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