最佳实践:存储密码表中的最安全的方法是什么? [关闭](Best practices: safe

2019-08-21 07:10发布

我使用PHP。 我曾经使用MySQL的原生功能密码()来存储密码。 我被告知密码()是不是安全了。 什么是存储密码在PHP的最佳方法是什么? 是MD5?

Answer 1:

更新答案2016年

该得主PHC (密码哈希处理竞聘)是Argon2 。 与Argon2哈希密码是为2016年最佳实践。

PHC从2013年跑到2015年作为一个开放竞争的同类过程NIST的AES和SHA-3比赛,并制定了加密标准的最有效途径。 我们收到了24名候选人,其中包括许多优秀的设计,并选择一个优胜者,Argon2,由亚历克斯·伯育空弗,丹尼尔·迪努和梅德Khovratovich从卢森堡大学设计的算法。

我们建议您使用Argon2,而不是传统的算法使用。

该参考实现可以在GitHub上 。

更新答案2012:

下面我给原来的答案曾一度被认为是最好的做法。 然而,在哈希计算技术的进步已经使这些计划脆弱。 展望未来,唯一的安全密码散列方案是迭代的散列比如bcrypt和PBKDF2 。 对于一个完整的讨论,请参阅杰夫·阿特伍德的分析 。

原来的答案2009年:

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

请记住,如果您存储密码以这种方式,您将无法检索用户的密码丢失了。 他们将只能重置密码。 这是因为您将使用单向散列 。 但是,这种限制一般是值得权衡一个更安全的密码存储系统。 即使你的数据库被泄露,用户的密码仍然是极其困难的,可能是不切实际通过将攻击者恢复。



Answer 2:

bcrypt实际上是更安全的。 请参阅: 足以与彩虹表:你需要知道的关于安全密码方案是什么



Answer 3:

你需要盐的密码。

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



Answer 4:

为了与对方的回答认为,vBulletin确实散列密码的可怕工作。 他们的盐是只有3个字符长,只有分数提高应用程序的安全性。

退房http://www.openwall.com/phpass/ 。 他们使用长哈希值,唯一的每个密码,并贯穿MD5数千次的密码了出色的工作。 这是最好的散列系统PHP在那里的一个。



Answer 5:

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



Answer 6:

盐和哈希值。

我们通常使用一个随机GUID的盐,然后SHA512散列。



文章来源: Best practices: safest method to store passwords in a table? [closed]