使用 sha1 密码哈希恢复密码

Posted

技术标签:

【中文标题】使用 sha1 密码哈希恢复密码【英文标题】:Password recovery with sha1 password hashing 【发布时间】:2011-04-30 21:07:15 【问题描述】:

我想为我的网站实现忘记密码功能。我使用 sha1 对密码进行哈希处理。我将如何为用户恢复它?

实现这个的最佳方法是什么?

【问题讨论】:

欺骗:***.com/questions/3615408/php-dehashing-the-password 等等 PHP:How to send the original password to the user when he clicks forgot password which is encrypted by using md5?的可能重复 【参考方案1】:

简短的回答,你不能。

您要实现密码重置功能,而不是密码检索功能。散列密码的全部意义在于您无法存储用户的密码,并且一旦丢失就无法恢复。

This 应该让您大致了解如何允许用户重置忘记的密码:

【讨论】:

不仅他做不到。更准确地说,他应该做不到。否则,根据定义,散列将毫无用处。 该死。我应该去找简短的答案:) 谢谢。因此,重置密码是有道理的。谢谢!【参考方案2】:

最好的方法是不要尝试恢复原始密码。如果用户丢失了密码,则生成一个新的随机密码并使用带外方法将其发送给他们(例如电子邮件)。请记住,散列密码的全部目的是为了防止恢复。

我知道,我知道,电子邮件不安全。但是,如果您要求用户立即更改生成的密码,那么风险就会降低。

顺便说一句,如果攻击者获得散列值,我不能建议您同时对密码进行加盐并迭代散列以防止暴力攻击。

【讨论】:

【参考方案3】:

没有已知的将 sha1 哈希恢复为其原始文本的有效方法(因为它是一种单向函数设计)。如果您希望以后能够向用户显示他们的密码,您将必须将其存储在一种可逆的方法中(IE 加密,明文)。这仍然可能是个坏主意,请尝试查找better way of doing it。

【讨论】:

恢复 sha1 哈希的无效方法是什么? :) @George Rainbow Tables 可以很好地处理简短的简单密码,但如果哈希被加盐或包含符号,您可能无法反转它。 蛮力。遍历所有可能的文本字符串,对每个字符串进行散列,与存储的散列进行比较。运行时间随着最大字符串长度呈指数增长。 5 个字符(字母和数字)大约是实用性的极限。 感谢您提交找回密码请求。大约 35 年后,我们将通过电子邮件将您的密码邮寄给您。

以上是关于使用 sha1 密码哈希恢复密码的主要内容,如果未能解决你的问题,请参考以下文章

PHP和恢复密码过程

sha1 哈希密码在内存中的安全性

如何从 MD5 恢复密码?

使用password_hash函数时的密码恢复[重复]

在哪里可以找到在 ASP .NET MVC2 中实现密码恢复的 C# 示例代码

如何从数据库中清除过期的令牌?