我正在使用 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 而不是旧算法。

参考实现可在 GitHub 上找到.

2012 年更新答案:

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

2009年原答案:

我建议首先添加一个 值到您的密码,然后是 散列 具有相当强的哈希函数的结果字符串,例如 SHA256. 。这可以防止明显的(纯文本密码)和不那么明显的(使用 彩虹桌).

请记住,如果您以这种方式存储密码,您将 不是 能够找回用户丢失的密码。他们只能重置密码。这是因为您将使用 单向哈希. 。但为了更安全的密码存储系统,这种限制通常值得权衡。即使您的数据库遭到破坏,攻击者恢复您的用户密码仍然非常困难,而且可能不切实际。

其他提示

您需要盐的密码。

vBulletin确实在存储密码了很好的工作。 MD5(MD5(密码)+盐);

要与对方的回答认为,vBulletin确实散列密码的可怕的工作。其盐是唯一的3个字符长,只有分数增加应用程序的安全性。

查核 http://www.openwall.com/phpass/ 。他们使用长哈希值,唯一的每个密码,并通过MD5数千次运行口令一个出色的工作。这是最好的散列系统为PHP在那里的一个。

如果你能避免存储用户密码,那是你的最佳选择,海事组织。采用OpenID(如#1)对用户进行认证。或活的身份验证( http://dev.live.com/liveid/ )。如果你真的,真的需要自己进行验证的用户;做什么亚萨说,在他的回答。 :)

盐和散列。

我们通常使用一个随机GUID作为盐,然后SHA512散列到

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top