我正在使用PHP.我曾经使用原生的mysql函数password()来存储密码.我被告知密码()不再安全了.在PHP中存储密码的最佳方法是什么?是MD5吗?
PHC(密码哈希竞争)的获胜者是Argon2.使用Argon2哈希密码是截至2016年的最佳做法.
PHC从2013年开始到2015年作为公开竞争 - 与NIST的AES和SHA-3竞赛相同的过程,以及开发加密标准的最有效方式.我们收到了24位候选人,其中包括许多出色的设计,并选出了一位获奖者Argon2,一种由Alex Biryukov,Daniel Dinu和来自卢森堡大学的Dmitry Khovratovich设计的算法.
我们建议您使用Argon2而不是传统算法.
该参考实现可以在GitHub上.
我在下面给出的原始答案曾被认为是最佳实践.然而,哈希计算技术的进步使这些方案变得脆弱.展望未来,唯一安全的密码哈希方案是迭代哈希,例如bcrypt和PBKDF2.有关完整讨论,请参阅Jeff Atwood的分析.
我建议先在前面加上一个盐值到您的密码,然后按散列与像一个相当强劲的散列函数结果字符串SHA256.这可以抵御明显的(纯文本密码)和不那么明显(使用Rainbow表的攻击).
请记住,如果以这种方式存储密码,您将无法检索用户丢失的密码.他们只能重置密码.这是因为您将使用单向哈希.但是这种限制通常值得权衡更安全的密码存储系统.即使您的数据库遭到入侵,您的用户密码仍然非常困难,并且可能是攻击者无法恢复的.