用于在MySQL表中存储用户密码的最佳PHP散列方法?

iam*_*rus 11 php mysql encryption passwords

我现在一直在阅读Stack Overflow问题大约15分钟,而且每一个问题似乎都与我之前阅读过的问题相矛盾.Bcrypt,SHA1,MD5等.我目前MD5我的密码,但我想让我的数据库更安全,以防万一.

我知道这已被问了一百万次,但我似乎无法在其他任何地方找到合适的答案.

谢谢.

Geo*_*ins 11

你看到矛盾的答案是因为没有正确的答案.您应该使用应用程序可以支持的最安全的方法.更安全=更多开销.

MD5已被打破并破裂.

根据这篇文章,SHA1被打破了.但它还没有被破解.

bcrypt没有(据我所知)被发现被打破.

给定足够的CPU周期,最终可以规避任何散列或加密算法.您的决定应该平衡数据的安全性和应用程序的性能.

鉴于这些警告,bcrypt是目前的事实标准.它专为强度而非速度而设计,并且不会被打破.有关bcrypt的信息索引,请参阅Wikipedia上bcrypt文章.

  • MD5,SHA1和类似的哈希算法被设计为*fast*.在保护密码时,这并不是您想要的.bcrypt的设计速度很慢(而且,它的设计也是为了扩展,以便更快的处理器出来,你可以提高难度) (6认同)

cee*_*yoz 9

我和bcrypt一起去.它大大降低了生成彩虹表的能力.

http://codahale.com/how-to-safely-store-a-password/

重要的是要注意盐对于防止字典攻击或暴力攻击是无用的.您可以使用大盐或许多盐或手工采摘,遮荫种植,有机喜马拉雅粉红盐.考虑到数据库中的哈希值和盐,它不会影响攻击者尝试候选密码的速度.

  • 你遗漏了重要的部分:"_Salt或者不,如果你使用的是通用哈希函数**专为速度而设计**你很好并且真正有效." (2认同)