我使用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散列。