为什么BCrypt生成的哈希是非确定性的

时间:2015-10-03 03:01:24

标签: security bcrypt.net

我过去曾使用过许多不同的哈希算法,但我觉得它们都是确定性的。

我只是将我的一些代码切换为使用BCrypt.Net,我不得不承认,当我的所有比较测试都失败时,我感到非常难过。

在我的测试中查找错误的尴尬时间后,我意识到我的假设哈希是确定性的是完全错误的。有一种验证方法可行,并且很容易修复代码,但我想了解更好的内容。

它是在内部腌制价值还是其他事情继续?

enter image description here

  • 请注意我在我的真实代码中腌制这个 - 这只是一个测试

1 个答案:

答案 0 :(得分:6)

  

是否在内部腌制价值

是的。 bcrypt不仅仅是一个原始哈希函数,它还包含salt和一些其他位,以便在没有额外输入的情况下验证哈希:

$2a$12$q6r.MpvzPrUszrWLgaRdlOs04kPcjk0syCDelrzES9O8.UNlHON.u
 ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^
 |  |  \- salt
 |  \---- work factor
 \------- format

您正在使用的API并未公开,因为您通常不需要操纵盐,但它在那里并且您不需要添加您的自己的。