BCrypt 与 SHA-256 的网络未来

Bra*_*ner 0 encryption passwords grails cryptography web-applications

我现在有一个 Grails 网络应用程序,它使用带有唯一盐的 SHA-256 将用户的密码存储在我的数据库中。我最近将 web 应用程序升级到 Grails(2.3.4) 的 Spring Security 插件 (2.0RC2) 的最新版本。新插件默认使用 BCrypt。我的问题是,哪个更好,为什么他们会转向 BCrypt。我读过关于喜欢 BCrypt 的人和讨厌 BCrypt 的人的文章。我看到的一个直接专业人士是算法中内置了加盐,因此我不必单独存储盐。我还注意到您可以在 SHA-256 上设置迭代。根据我的阅读,很多人喜欢 BCrypt,因为您也可以为其设置迭代,但这与设置 SHA-256 的迭代有何不同?一个博客说 PBKDF2 是一个非常优越的选择,因为它“ s 已经过测试。但我也听到了关于 BCrypt 的同样事情......

Maa*_*wes 5

bcrypt 和 PBKDF2 都是众所周知的算法。只要您在范围内使用它们,它们中的任何一个都应该没问题。

您当然可以使用 SHA-256 使用迭代计数和盐创建类似的方案。但是,除非您提出自己的安全证明、测试、社区等,否则您应该使用已知或标准化的算法(如果可用)。

PBKDF2 确实在底层使用了散列算法,因此可以针对 SHA-256 进行配置 - 如果实现允许的话。


目前唯一的其他选择是 scrypt。scrypt 可以说更安全,因为它依赖于相对大量的内存。因此,scrypt 更难并行化,例如使用向量机(如 GPU)。


到目前为止,密码哈希竞赛已经结束,并提供了一些有趣的替代方案,例如获胜者 Argon2。