密码哈希使用什么?有什么理由不使用jBCrypt?

2022-09-03 02:53:22

我计划在新的Web应用程序中使用jBCrypt进行密码哈希处理,因为它应该是我所读到的最好的。由于我之前还没有使用它,所以我正在研究是否有任何理由不使用它。

我有这个:

  • 我没有在Maven存储库中找到它(在 mvnrepository.org 搜索jbcrypt和bcrypt),这是一个下降器,因为如果可能的话,我希望使用Maven存储库管理我的依赖项。如果jBCrypt是密码哈希的最佳解决方案,我必须设置自己的本地存储库并以这种方式使用它。还是我只是错过了它?也许它就在某个地方?
  • 它只在版本0.2,但也许它无论如何都是稳定的,低版本号的原因还有其他原因?

答案 1

jBcrypt作为密码的加密算法可能很好;河豚比较强壮。尽管Blowfish本身存在一些实现缺陷,但我没有发现任何关于jBcrypt的报道。另一方面,Blowfish没有像其他算法那样经过严格的测试,并且破解风格的已知plaintxt攻击通常比预期的效果更好,令人惊讶的加密极客。

所以这是我的建议:

  • 继续使用jBcrypt,但要尽可能地保护你的加密密码文件 - 就像你在UNIX系统上使用/etc/shadow一样。
  • 与Nikhil的建议相反,我会将源代码拉入你的版本控制中,原因有两个:(1)你还会把它们放在哪里,因为每当你构建时你都需要它们,(2)因为做jBcrypt的人总是有机会转向其他事情,你不想发现自己在交付之前就悬而未决(这是不可避免的,当你发现的时候)。在这种情况下,我会将源代码放入您的版本控制中,就好像它们是您的代码一样,然后可以插入任何更改,就像您自己构建了新版本一样。没有必要比平时更复杂。

答案 2

至于你对它不成熟的担忧,我建议你建立自己的JUnit测试,比较jBcrypt和更成熟的Bcrypt的结果,看看你是否得到相同的结果,然后将这些结果贡献给jBcrypt项目。

但这已经做到了:

...附带一组 JUnit 单元测试,以验证库的正确操作以及与 bcrypt 算法的规范 C 实现的兼容性。

仔细阅读JUnit测试,看看它们是否符合你的满意度,这就是我开始的地方......


推荐