如何从MD5中恢复密码?

4
我在我的数据库中使用md5加密用户的密码,并且想要通过发送电子邮件来帮助他们找回忘记的密码。问题是我不知道如何编写PHP代码来恢复它。
如果有任何答案或适当的链接,将不胜感激。谢谢。

10
哈希而不是加密,使用哈希的整个意义就在于此,不能反向推导出原始密码。标准做法是将用户引导至一个 URL 来设置新密码。 - user557846
如果您希望密码可以被恢复,为什么首先要对它们进行哈希处理呢?(注意:我并不建议不对密码进行哈希处理。) - JJJ
@Dagon,如果您提供一个答案并解释一下为什么要这样做,我会给您点赞的。 - Ismael
1
可能是Is it possible to decrypt md5 hashes?的重复问题。 - Mechanical snail
5个回答

12

无法完成此操作1

MD5是一个哈希函数而不是加密函数。它是一个单向过程,不可逆。

1实际上,有许多这样的密码(输入),当哈希时将产生相同的MD5值,但仅找到一个并且通常不可能找到原始的。这就是“破解”密码的含义 - 它找到一个这样的输入,当哈希时会产生特定的输出。(我将不再提供更多帮助。)


由于状态反转是不可逆的,但可以通过查看彩虹表来找到等效值。这在另一个答案中提到(尽管引用的链接有问题,但很容易通过谷歌找到等效值)。 - James Oravec

7

如前所述,MD5像所有哈希函数一样,不能被反转。这也可以做到,因为许多字符串可以被散列成相同的字符串,当反转时,您可以得到不同的字符串。

如果您很幸运,可以在彩虹表中找到您的哈希值:http://www.md5rainbow.com/,但它可能会给您带来不是原始字符串,尽管这并不重要,因为在登录时您可能会比较散列字符串。

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


上面的链接已经失效了,但只需在谷歌搜索“md5 rainbow”,我得到了https://crackstation.net/,它可以正常使用。 - James Oravec

2

MD5是一种哈希函数,您不应尝试恢复已经哈希过的密码。常见的做法是删除已哈希的密码,并强制用户通过电子邮件中的链接设置新密码。传递哈希密码,然后尝试反向哈希,会造成严重的安全漏洞。


2

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


0

彩虹表可能会对您有所帮助。
从哈希值中恢复原始密码是不可能的,但使用彩虹表可能会找到一些字符串,可以生成与所需哈希相同的哈希值。


请告诉我你负责哪些网站,这样我就可以避开它们。 - user557846

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接