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

Kel*_*ron 2 security bcrypt.net

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

我刚刚切换了一些代码来使用BCrypt.Net,我不得不承认,当我的所有比较测试都失败时,我完全被困住了.

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

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

在此输入图像描述

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

bob*_*nce 6

它是在内部腌制价值观吗?

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

$2a$12$q6r.MpvzPrUszrWLgaRdlOs04kPcjk0syCDelrzES9O8.UNlHON.u
 ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^
 |  |  \- salt
 |  \---- work factor
 \------- format
Run Code Online (Sandbox Code Playgroud)

您正在使用的API不会暴露它,因为您通常不需要操作盐,但它就在那里,您不需要添加自己的API.