我过去使用过许多不同的哈希算法,我的印象是它们都是确定性的。
我刚刚将一些代码切换为使用 BCrypt.Net,我不得不承认,当我所有的比较测试都失败时,我完全被难住了。
在我的测试中寻找错误一段令人尴尬的时间后,我意识到我关于哈希值是确定性的假设是完全错误的。有一种有效的验证方法,并且很容易修复代码,但我想更好地了解发生了什么。
是在内部腌制价值观还是发生了其他事情?
- 请注意,我在我的真实代码中加盐 - 这只是一个测试
是否在内部腌制价值观
是的。 bcrypt 不仅仅是一个原始哈希函数,它还包括盐和一些其他位,以允许在没有额外输入的情况下验证哈希值:
$2a$12$q6r.MpvzPrUszrWLgaRdlOs04kPcjk0syCDelrzES9O8.UNlHON.u
^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^
| | \- salt
| \---- work factor
\------- format
您使用的 API 不会公开它,因为您通常不需要操作盐,但它就在那里,您不需要添加自己的盐。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)