首页 > 解决方案 > 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我们应该取一个密码+盐然后散列。

例如 :

在此处输入图像描述

您可以在图像中看到盐在最终结果中不可见。

问题:

他们为什么要像这样实施哈希加盐密码?这是正确的方法吗?在最终结果中可见盐不是很危险吗?

标签: cryptographybcrypt

解决方案


盐与哈希一起存储,以便对其进行验证。

如果不存储盐,就不可能验证散列,因为您不知道散列的完整输入(包括盐)。

加盐的目的是使每个哈希值不同;不要保密。


推荐阅读