0

好时机我使用 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是否正确?这些设置是最佳设置吗?

4

2 回答 2

0

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

string passwordHash =  BCrypt.HashPassword("my password");
bool isPasswordCorrect = BCrypt.Verify("my password", passwordHash);
于 2021-07-03T16:18:37.000 回答
0

如果您使用.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

于 2021-08-06T12:32:39.353 回答