最佳实践:在表中存储密码的最安全方法?

Moo*_*oon 12 php security password-encryption

我正在使用PHP.我曾经使用原生的mysql函数password()来存储密码.我被告知密码()不再安全了.在PHP中存储密码的最佳方法是什么?是MD5吗?

Asa*_*aph 24

2016年更新答案:

PHC(密码哈希竞争)的获胜者是Argon2.使用Argon2哈希密码是截至2016年的最佳做法.

PHC从2013年开始到2015年作为公开竞争 - 与NIST的AES和SHA-3竞赛相同的过程,以及开发加密标准的最有效方式.我们收到了24位候选人,其中包括许多出色的设计,并选出了一位获奖者Argon2,一种由Alex Biryukov,Daniel Dinu和来自卢森堡大学的Dmitry Khovratovich设计的算法.

我们建议您使用Argon2而不是传统算法.

参考实现可以在GitHub上.

更新的答案2012:

我在下面给出的原始答案曾被认为是最佳实践.然而,哈希计算技术的进步使这些方案变得脆弱.展望未来,唯一安全的密码哈希方案是迭代哈希,例如bcryptPBKDF2.有关完整讨论,请参阅Jeff Atwood的分析.

原答案2009:

我建议先在前面加上一个值到您的密码,然后按散列与像一个相当强劲的散列函数结果字符串SHA256.这可以抵御明显的(纯文本密码)和不那么明显(使用Rainbow表的攻击).

请记住,如果以这种方式存储密码,您将无法检索用户丢失的密码.他们只能重置密码.这是因为您将使用单向哈希.但是这种限制通常值得权衡更安全的密码存储系统.即使您的数据库遭到入侵,您的用户密码仍然非常困难,并且可能是攻击者无法恢复的.

  • 这是处理密码的两种方法之一.另一个是; 别.使用OpenId/Facebook Connect/Live Auth /其他内容; 换一种说法; 让其他人存储密码. (3认同)