17

我计划在一个新的 Web 应用程序中使用jBCrypt进行密码散列,因为它应该是我读过的最好的。因为在我调查是否有任何理由不使用它之前我没有使用它。

我有这个:

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

3 回答 3

5

jBcrypt 作为密码的加密算法可能很好;河豚比较强。尽管在 Blowfish 本身中报告了一些实现缺陷,但我没有发现任何关于 jBcrypt 的报道。另一方面,Blowfish 并没有像其他算法那样经过大量测试,而且破解式的 known-plaintxt 攻击通常比预期的效果更好,这让加密爱好者感到惊讶。

所以这就是我的建议:

  • 继续使用 jBcrypt,但在合理的范围内保护您的加密密码文件——就像在 UNIX 系统上使用 /etc/shadow 一样。
  • 与 Nikhil 的建议相反,我会将源代码拉入您的版本控制,原因有两个:(1)您会将它们保留在哪里,因为您在构建时需要它们,以及(2)因为做 jBcrypt 的人总是有机会将继续做其他事情,并且您不希望在交付之前发现自己悬而未决(当您发现时不可避免地会这样做。)在这种情况下,我会将源代码放入您的版本控制中就好像它们是您的代码一样,然后可以插入任何更改,就好像您自己构建了一个新版本一样。无需比通常情况下更复杂。
于 2009-03-08T00:56:12.910 回答
2

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

但这已经完成了:

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

仔细阅读 JUnit 测试以查看它们是否满足您的满意度是我开始的地方......

于 2009-03-08T06:48:45.463 回答
0

我怀疑稳定性是否会成为一个问题,因为 bcrypt 本身已经成熟,而且它的小型标准化包装器并没有做任何特别的事情。我对 Damien Miller 的另一个 bcrypt 包装器python-bcrypt感到满意,它仅在 0.1 版上。

我不熟悉 Maven,但是(异端警告!)我怀疑您需要对像 bcrypt 这样简单的组件进行版本控制。引用该网站的话,从 v0.1 到 v0.2 的更改是“正确性、错字和 API 调整(完全向后兼容)”,TODO 列表是空的。

于 2009-03-08T00:17:50.037 回答