如何解密md5哈希

时间:2011-01-09 05:48:52

标签: php hash md5 encryption

  

可能重复:
  PHP:How to send the original password to the user when he clicks forgot password which is encrypted by using md5?

我已经在php中创建了一个登录和注册系统,我想创建一个忘记密码链接以从数据库中检索密码。我是怎么做到的?

注意:使用md5哈希加密的数据库中的密码

5 个答案:

答案 0 :(得分:13)

MD5是加密哈希,而不是加密方案。它无法以任何直接的方式逆转。它只能通过尝试可能的密码强制强制,直到找到匹配的密码。不建议这样做。

您无法合理地恢复密码。忘记密码链接应改为重置密码。

这是有意和良好的设计。 MD5用于散列密码,这样如果密码数据库被黑客入侵,黑客只能访问密码的哈希值,而不能访问原始密码,这使得他们很难发现用户的密码。

然而,此时,MD5破解程序已经足够快,不建议密码使用。将来,scrypt或bcrypt应该用作密码哈希函数。

答案 1 :(得分:5)

拥有密码哈希的重点是无法从哈希中恢复原始密码。这样,如果有人攻击密码数据库并窃取所有哈希值,他们就无法恢复所有用户的密码。事实上,这在数学上是不可能的。哈希函数将所有无限多个可能的字符串映射到一组固定长度的字符串,因此(理想情况下!)无限多个字符串可以散列到任何特定的哈希值。

如果你想“忘记密码?”选项,最好只是将用户的密码重置为随机的,然后发送包含新垃圾密码的电子邮件。

答案 2 :(得分:4)

md5是单向的。您无法撤消md5加密字符串。

通常情况下,开发人员在提供忘记密码链接时会做的是将用户密码重置为随机密码,通过电子邮件将其提供给他们,然后强制他们在下次登录时重置密码。

另一个解决方案是为他们提供一个随机密钥和一个“忘记密码链接”,可以用来重置他们的密码。

如果您正在考虑它,我想提一下,以纯文本格式将密码存储在数据库中并不是一个好主意。您无法检索用户密码的事实意味着黑客也不能。

答案 3 :(得分:4)

虽然其他海报是正确的,但我认为正在寻找一个具体的答案,所以在这里。

忘记密码功能可以通过使用与用户ID相关的两列来实现。一列是随机字符串,可以是任意长度,其他日期时间。当用户指示他们忘记了密码时,您将生成随机字符串并使用字符串和当前日期时间更新此记录。然后,您使用随机字符串的网址向其注册的电子邮件ID发送电子邮件。打开该URL时,您将检查表中是否存在随机字符串以及它是否已过期。您将检查当前日期时间和生成字符串的日期时间,并且您将拥有自己的策略来确定您将等待的最长时间。通常3天就足够了。如果链接已过期,则必须再次启动忘记密码。如果链接未过期,您将记下生成该字符串的用户标识,并且您将要求用户输入其用户名和新密码两次。用户名必须与生成字符串的用户ID匹配,并且两个密码相同。然后,您将使用新密码的md5哈希更新用户密码。

您不想生成新密码的原因是因为如果用户重新调用密码,他们仍然可以登录,即使他们的忘记密码正在处理中。

答案 4 :(得分:3)

如果用户忘记了密码,则不应向他们发送密码。相反,他们需要在验证(通过收到电子邮件或其他方式)确认他们确实是正确的用户后重置密码。