我以散列形式存储我的所有密码。我需要找回这些密码,例如
我的密码是“123456”,我将其保存为散列的“3453474852dfdsfdsfdf”值。
我需要从散列值中检索原始密码。(获取密码)。
我怎样才能做到这一点?。我正在做 SHA1 哈希算法。
这是不可能的。SHA1 是一种非常小心谨慎的单向函数。
您为什么要尝试恢复原始密码?身份验证不需要它,因为您只需散列输入密码并比较散列值。
如果是因为用户忘记了密码,那么标准做法似乎是生成一个随机重置链接并将其通过电子邮件发送给用户。
你不能那样做,这就是哈希函数的意义所在。事实上,多个密码可以给你相同的哈希,所以即使你找到一个字符串给你这个哈希,它也可能不是正确的。
如果您需要找回密码,请不要使用散列,使用 RSA 之类的东西。
一些链接供您阅读:
关于该主题的两篇有趣的文章:您可能错误地存储了密码和Rainbow Hash Cracking ...
因此,这取决于您打算做什么(密码存储保险箱或为网站上的用户存储密码等)。对于前一种用法,你可以看看KeePass是如何工作的(它是开源的)。
你不能,这就是哈希的用途。正因为如此,许多网站都可以选择重置密码(即将您提供的新密码的哈希值放入数据库)。您通常找不到检索当前密码的选项(即通过邮件将其发送给您)。
如果网站确实提供了此功能,则意味着它们不存储密码哈希,而是存储明文或加密密码。由于存储哈希是最佳做法,因此您应该避开提供密码检索的站点。
而且您应该避免自己开发这样的网站;-)
理论上你不能像其他评论提到的那样。
我认为 Rick 想说的是,如果攻击者知道您使用 SHA1 算法进行散列和您使用的盐,他们可以将散列映射到密码以尝试检索密码。
但要回答你的问题:不,你不能轻易做到这一点。
在这里并不是要粗鲁,但是您真的了解为什么首先要对密码进行哈希处理吗?