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

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

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

【问题讨论】:

标签: php hash password-protection


【解决方案1】:

简短的回答,你不能。

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

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

【讨论】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

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