PHP 去散列密码

Posted

技术标签:

【中文标题】PHP 去散列密码【英文标题】:PHP dehashing the password 【发布时间】:2011-04-06 15:16:29 【问题描述】:

好的。很明显,必须将散列密码存储在数据库中,但如果用户不记得密码并想要取回密码,那么显然用户不会喜欢使用散列密码。如果密码使用 md5 或其他类似 salt 和 sha1 进行哈希处理,那么如何取回密码。

【问题讨论】:

哈希就像绞肉机。你可以把一头牛变成碎牛肉,但你不能把碎牛肉变成一头牛。 【参考方案1】:

只有一个简单的答案:你不能。

嗯,理论上你可以,但如果密码足够长,每个密码可能需要很多年。毕竟,这首先是对密码进行哈希处理的目的:使数据对攻击者有效地无用(或至少保护用户的明文密码,这是敏感数据。)

只需让网站发送一封“更改您的密码”电子邮件,其中包含指向该用户可以更改其密码的页面的链接。这就是大多数专业网站处理这种困境的方式。

【讨论】:

这就是为什么大多数专业网站的密码强度与您注册时使用的电子邮件帐户的密码强度相当! 确实如此 :) 但它仍然胜过安全问题。 tools.benramsey.com/md5 md5 哈希反向工具。然而,好的密码可能不会存在于数据库中。 @Ben 该站点可用作密码筛选过程的组件。 IE。如果新密码的 MD5 散列在数据库中,让用户创建一个更安全的! :) 如果您使用每个用户的随机盐,那么这样的网站就无关紧要了。【参考方案2】:

这意味着难以处理。因此,您通常必须提供某种重置方法。向用户的电子邮件发送特殊链接很常见,尽管这会降低您对电子邮件帐户的安全性。

见 Forgot Password: what is the best method of implementing a forgot password function? 。

【讨论】:

【参考方案3】:

散列而不是加密密码的安全性在于您无法反转散列。如果您可以取消哈希密码并向用户提供他们的纯文本密码,那么任何黑客都可以反转您用于注册和登录的哈希密码并“去哈希”以获取用户的密码。 这是一项功能,而不是错误。

【讨论】:

【参考方案4】:

散列本身代表“无法取回”。

如果用户不记得他们的密码,他们肯定不需要这个密码。 只需创建另一个随机的并发送它们。 没什么大不了的。

【讨论】:

【参考方案5】:

是的..有人可能忘记了他/她的密码..使用散列密码的好习惯是让用户输入他/她要重置密码的帐户的电子邮件地址,然后系统将重置用户密码与另一个生成的密码。类似 MD5 的哈希密码几乎不可能从哈希密码中找回原始密码

【讨论】:

【参考方案6】:

请始终小心那些可以通过电子邮件向您发送您使用的密码的网站。这意味着任何有权访问密码数据库的人都可以轻松看到您的密码,如果您重复使用密码,这尤其危险。

对于密码重置,我建议使用带有同样加密答案的“安全问题”。

所有运营网站的人都应该合理地保护他们的客户免受黑客攻击。

【讨论】:

以上是关于PHP 去散列密码的主要内容,如果未能解决你的问题,请参考以下文章

PHP密码散列算法的学习

如何使用 PHP 的 password_hash 来散列和验证密码

如何使用 PHP 的 password_hash 来散列和验证密码

如何用河豚散列长密码(> 72个字符)

散列密码的最佳方法是啥? [复制]

密码重置令牌存储 - 值应该被散列吗?