最佳实践:在表中存储密码的最安全方法?[关闭]
-
22-09-2019 - |
题
我正在使用 PHP。我曾经使用本机mysql函数password()来存储密码。有人告诉我,password() 不再安全了。在 PHP 中存储密码的最佳方法是什么?是MD5吗?
解决方案
2016 年更新答案:
的获胜者 初级卫生保健 (密码哈希竞赛)原为 氩气2. 。截至 2016 年,使用 Argon2 对密码进行哈希处理是最佳实践。
PHC 于 2013 年至 2015 年作为公开竞赛进行——与 NIST 的 AES 和 SHA-3 竞赛流程相同,也是开发加密标准的最有效方法。我们收到了 24 名候选者,其中包括许多优秀的设计,最终选出了一位获胜者,Argon2,这是一种由卢森堡大学的 Alex Biryukov、Daniel Dinu 和 Dmitry Khovratovich 设计的算法。
我们建议您使用 Argon2 而不是旧算法。
2012 年更新答案:
我在下面给出的原始答案曾经被认为是最佳实践。然而,哈希计算技术的进步使这些方案变得脆弱。展望未来,唯一安全的密码哈希方案是迭代哈希,例如 密码 和 PBKDF2. 。有关完整的讨论,请参阅 杰夫·阿特伍德的分析.
2009年原答案:
我建议首先添加一个 盐 值到您的密码,然后是 散列 具有相当强的哈希函数的结果字符串,例如 SHA256. 。这可以防止明显的(纯文本密码)和不那么明显的(使用 彩虹桌).
请记住,如果您以这种方式存储密码,您将 不是 能够找回用户丢失的密码。他们只能重置密码。这是因为您将使用 单向哈希. 。但为了更安全的密码存储系统,这种限制通常值得权衡。即使您的数据库遭到破坏,攻击者恢复您的用户密码仍然非常困难,而且可能不切实际。
其他提示
bcrypt 实际上更安全。看: 彩虹表就够了:关于安全密码方案您需要了解什么
您需要盐的密码。
vBulletin确实在存储密码了很好的工作。 MD5(MD5(密码)+盐);
要与对方的回答认为,vBulletin确实散列密码的可怕的工作。其盐是唯一的3个字符长,只有分数增加应用程序的安全性。
查核 http://www.openwall.com/phpass/ 。他们使用长哈希值,唯一的每个密码,并通过MD5数千次运行口令一个出色的工作。这是最好的散列系统为PHP在那里的一个。
如果你能避免存储用户密码,那是你的最佳选择,海事组织。采用OpenID(如#1)对用户进行认证。或活的身份验证( http://dev.live.com/liveid/ )。如果你真的,真的需要自己进行验证的用户;做什么亚萨说,在他的回答。 :)
盐和散列。
我们通常使用一个随机GUID作为盐,然后SHA512散列到