0

我以散列形式存储我的所有密码。我需要找回这些密码,例如

我的密码是“123456”,我将其保存为散列的“3453474852dfdsfdsfdf”值。

我需要从散列值中检索原始密码。(获取密码)。

我怎样才能做到这一点?。我正在做 SHA1 哈希算法。

4

8 回答 8

14

这是不可能的。SHA1 是一种非常小心谨慎的单向函数

您为什么要尝试恢复原始密码?身份验证不需要它,因为您只需散列输入密码并比较散列值。

如果是因为用户忘记了密码,那么标准做法似乎是生成一个随机重置链接并将其通过电子邮件发送给用户。

于 2008-11-10T06:38:36.580 回答
3

你不能。散列函数(与加密相反)的要点在于它是一个单向过程。换句话说,可以有多个密码哈希到相同的值,并且没有办法从哈希到原始密码。

这很有用,因为您不需要任何类型的“主密码”或双向加密所需的其他秘密 - 但这确实意味着您永远无法从散列值中取回原始密码。如果您确实需要密码,则必须使用加密/解密而不是散列。

于 2008-11-10T06:39:01.897 回答
3

你不能那样做,这就是哈希函数的意义所在。事实上,多个密码可以给你相同的哈希,所以即使你找到一个字符串给你这个哈希,它也可能不是正确的。
如果您需要找回密码,请不要使用散列,使用 RSA 之类的东西。

一些链接供您阅读:

于 2008-11-10T06:40:07.153 回答
3

关于该主题的两篇有趣的文章:您可能错误地存储了密码Rainbow Hash Cracking ...

因此,这取决于您打算做什么(密码存储保险箱或为网站上的用户存储密码等)。对于前一种用法,你可以看看KeePass是如何工作的(它是开源的)。

于 2008-11-10T09:34:58.580 回答
2

你不能,这就是哈希的用途。正因为如此,许多网站都可以选择重置密码(即将您提供的新密码的哈希值放入数据库)。您通常找不到检索当前密码的选项(即通过邮件将其发送给您)。

如果网站确实提供了此功能,则意味着它们存储密码哈希,而是存储明文或加密密码。由于存储哈希是最佳做法,因此您应该避开提供密码检索的站点。

而且您应该避免自己开发这样的网站;-)

于 2008-11-10T06:57:37.790 回答
1

如果您不使用,那么您可以使用字典攻击来破解密码。

编辑:我意识到他最初的问题是如何检索他存储的密码,但是为问题标题所暗示的更通用的问题提供解决方案让我很开心。

于 2008-11-10T06:54:50.587 回答
0

理论上你不能像其他评论提到的那样。

我认为 Rick 想说的是,如果攻击者知道您使用 SHA1 算法进行散列和您使用的盐,他们可以将散列映射到密码以尝试检索密码。

但要回答你的问题:不,你不能轻易做到这一点。

于 2008-11-10T07:19:08.510 回答
0

在这里并不是要粗鲁,但是您真的了解为什么首先要对密码进行哈希处理吗?

于 2008-11-10T09:49:14.417 回答