【问题标题】:How to use the verify function correctly in Bcrypt如何在 Bc​​rypt 中正确使用验证功能
【发布时间】:2021-09-09 12:14:34
【问题描述】:

好时光 我使用 bcrypt 在 .net mvc(c#) 中加密密码 在注册时,我使用以下代码:

string salt = BCrypt.Net.BCrypt.GenerateSalt(12);
string hashedPassword = BCrypt.Net.BCrypt.HashPassword(enteredPassword, salt);

而此时,hashedPassword 已存入数据库

我现阶段的问题是盐是否需要存储在数据库中?

我也在登录中使用了以下代码:

--hashedPassword is read from the database
 bool verify = BCrypt.Net.BCrypt.Verify(password, hashedPassword,false, hashType : HashType.SHA512);
        
        
     if (verify)
     {
     }
     else
     {
     }

下一个问题是验证是否正确完成?在这个阶段我不应该使用盐吗? 我没有在登录时使用盐

最后一个问题是在verify函数中使用hashType: HashType.SHA512和enhancedEntropy: false是否正确?这些设置是最佳设置吗?

【问题讨论】:

    标签: c# hash bcrypt bcrypt.net


    【解决方案1】:

    不确定你是否参考了这个bcrypt.net library,但很可能没有必要自己生成盐,而且盐肯定包含在生成的哈希值中。所以你可以写:

    string passwordHash =  BCrypt.HashPassword("my password");
    bool isPasswordCorrect = BCrypt.Verify("my password", passwordHash);
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 .net 5 之类的东西,您可能会发现在类中导入静态并使用它调用哈希/验证会更简单

      例如

      using System;
      using static BCrypt.Net.BCrypt;
      
      namespace BcryptNet5
      {
          class Program
          {
              static void Main(string[] args)
              {
                  var hash = HashPassword("Test");
              }
          }
      }
      

      如上一个答案所述;不要产生你自己的盐。作为 bcrypt 标准的一部分,盐与散列一起存储,该库负责为您生成盐。该方法存在的唯一原因是为了进行高级测试。


      维护者 BCrypt.Net

      【讨论】:

        猜你喜欢
        • 2015-09-11
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 2019-03-16
        • 1970-01-01
        • 2017-07-26
        相关资源
        最近更新 更多