微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bcrypt中如何正确使用验证功能

如何解决Bcrypt中如何正确使用验证功能

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

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

而此时,hashedPassword 存储在数据库

现阶段我的问题是salt是否需要存入数据库

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

--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是否正确?这些设置是最佳设置吗?

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。