3

过去我使用过许多不同的哈希算法,我的印象是它们都是确定性的。

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

在我的测试中寻找错误一段令人尴尬的时间后,我意识到我关于哈希是确定性的假设是完全不正确的。有一种验证方法有效,并且很容易修复代码,但我想更好地了解发生了什么。

它是在内部腌制价值还是发生了其他事情?

在此处输入图像描述

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

1 回答 1

9

是否在内部对值进行了盐渍化

是的。bcrypt 不仅仅是一个原始的散列函数,它包括盐和其他一些位,以允许在没有额外输入的情况下验证散列:

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

您使用的 API 不会公开它,因为您通常不需要操作盐,但它就在那里,您不需要添加自己的。

于 2015-10-05T12:23:26.343 回答