cryptography - Bcrypt 和加盐密码 - 澄清?
问题描述
我正在使用Bcrypt nuget 库,它是一个实现 Blowfish 密码的加密实用程序
一个简单的场景是创建一个哈希密码+盐。
关于他们实施它的方式,我不明白一件事。
例子:
var salt= BCryptHelper.GenerateSalt(12);
Console.WriteLine(salt);
var hashedPassword = BCryptHelper.HashPassword("myPassword",salt) ;
Console.WriteLine(hashedPassword);
Console.WriteLine(BCryptHelper.CheckPassword("myPassword",hashedPassword));
输出 :
$2a$12$RqHpb3v6MeaB5sj0wcasKO
$2a$12$RqHpb3v6MeaB5sj0wcasKO/QkBTgrfVRYk95sT.OGIdU.O/Ip4goi
True
在第一行,我生成盐。后来我用盐对密码进行哈希处理。
但是看看响应,他们实际上将它添加到哈希密码而不是添加 salt ,然后对其进行哈希处理。
请注意,您确实在散列密码中看到了盐:
恕我直言,这不是正确的方法。FWIW我们应该取一个密码+盐然后散列。
例如 :
您可以在图像中看到盐在最终结果中不可见。
问题:
他们为什么要像这样实施哈希加盐密码?这是正确的方法吗?在最终结果中可见盐不是很危险吗?
解决方案
盐与哈希一起存储,以便对其进行验证。
如果不存储盐,就不可能验证散列,因为您不知道散列的完整输入(包括盐)。
加盐的目的是使每个哈希值不同;不要保密。
推荐阅读
- java - 从 Firefox 复制并在 Ubuntu 中使用 Java 读取时,剪贴板内容混乱
- ios - iOS react-native-code-push 应用程序在调试/发布模式下工作,但带有存档的 TestFlight 应用程序的白屏
- google-chrome - 开发模式下的常量 chrome 扩展 ID
- c++ - 使用正确的编码创建新的注册表项
- multithreading - 引用 Mutex 内部的数据
- angular - 导航到子组件时未调用 ngOnInit(但按预期调用构造函数和 ngOnDestroy)
- javascript - 加载页面显示弹窗时如何使用
- sql-server - User.IsInRole("User") Not working 我的在线服务器,但在使用在线 sql server 数据库两种模式时,它在我的本地系统上工作
- php - 如何在php中获取数据数组的总和
- jquery - 评价哟!- 点击添加禁用