3

我正在使用 md5 在我的数据库中加密用户的密码,我希望他们在忘记密码时通过向他们发送电子邮件来取回密码。问题是我不知道如何编写 PHP 代码来恢复它。

任何答案或适当的链接将不胜感激。谢谢..

4

5 回答 5

11

这不能做1

MD5 是散列函数而不是加密函数。这是一个单向过程,不可逆。

1实际上,有很多这样的密码(输入)在散列时会产生相同的MD5 值,但是很难找到一个并且 [通常] 不可能找到原始的。这就是“破解”密码所做的事情——它找到一个这样的输入,当散列时,会产生特定的输出。(我不会在这条路上提供更多帮助。)

于 2012-04-06T09:02:46.237 回答
6

如前所述 - MD5 像所有散列函数一样 - 不应该被颠倒。也可以这样做,因为许多字符串可以散列到同一个字符串,并且当反转时你可以得到不同的字符串。

如果你幸运的话,你可以在 Rainbowtables 中找到你的哈希值:http ://www.md5rainbow.com/ 但它可以带给你的不是你的原始字符串,尽管在你的登录中你可能会比较散列字符串并不重要。

您可能想要做的是“重置密码”而不是发送原始密码。

于 2012-04-06T09:10:24.007 回答
2

MD5 是一个散列函数,你不应该尝试恢复散列密码。通常的做法是删除散列密码并强制他们从电子邮件中的链接设置新密码。传递散列密码,然后尝试反向散列它们,是一个严重的安全漏洞。

于 2012-04-06T09:07:13.000 回答
2

从理论上讲,在大多数情况下,您的用户希望您向他们发送一个特殊链接,该链接将在经过一些检查后重置密码,您不应该在邮件中发送纯文本密码,也不应该让您的用户知道您有一个未经哈希处理的密码版本在您的系统中可用。

于 2012-04-06T09:12:59.867 回答
0

彩虹桌可能会让您感兴趣。
不可能从哈希中恢复原始密码,但使用彩虹表可能会找到一些字符串,这些字符串会产生与您需要的相同的哈希。

于 2012-04-06T09:05:42.590 回答