如何解决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 举报,一经查实,本站将立刻删除。