使用sha1密码哈希进行密码恢复

5
我希望为我的网站实现一个忘记密码的功能。我使用sha1对密码进行哈希运算。那么如何才能为用户找回密码呢?
最佳实现方法是什么?

1
重复:https://dev59.com/tlDTa4cB1Zd3GeqPGyzg等其他问题 - Anon
3个回答

30

简短回答,你不能。

你想实现的是密码重置功能而非密码检索功能。哈希密码的整个意义在于你无法存储用户的密码,如果丢失了它也无法恢复。

这篇文章会给你大致的思路,如何允许用户重置忘记的密码:


6
不仅他不能做到,更确切地说,他不应该能够做到这一点。否则,散列将根据定义变得无用。 - ITroubs
2
糟糕,我应该选择简短的答案 :) - Cameron Skinner
谢谢您。所以,重置密码是有意义的。谢谢! - BigMike

8
最好的方法是不要尝试恢复原始密码。如果用户忘记密码,则生成一个新的随机密码,并使用带外方法将其发送给用户(例如电子邮件)。请记住,哈希密码的整个目的是防止恢复。
我知道,我知道,电子邮件并不安全。但是,如果您要求用户立即更改生成的密码,则可以减轻风险。
顺便说一句,我强烈建议您还要对密码进行盐值处理和迭代哈希以防止暴力攻击,即使攻击者获得了哈希值。

3

不行

目前没有已知的有效方法可以将sha1哈希值转换回其原始文本(因为它是一种单向函数)。如果您想在以后向用户显示他们的密码,您 必须 将其存储在可逆的方法中(如加密,明文)。这仍然可能是一个坏主意,请尝试找到更好的方式


撤销sha1哈希的一种无效方法是什么? :) - George Johnston
@George 彩虹表在短而简单的密码上效果还不错,但如果哈希值被加盐或包含符号,你可能无法反向破解它。 - Kendall Hopkins
1
暴力破解。循环遍历所有可能的文本字符串,对每个进行哈希处理,与存储的哈希值进行比较。运行时间随着最大字符串长度呈指数增长。5个字符(字母和数字)左右是实用性的极限。 - Seva Alekseyev
3
感谢您提交找回密码的请求。您将会在约35分钟内收到一封包含密码的电子邮件。 - George Johnston

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