我将所有密码存储在哈希表格中。我需要检索这些密码 例如
我的密码是“123456”我将其保存为散列“3453474852dfdsfdsfdf”值。
我需要从散列值中检索原始密码。 (获取密码)。
我该怎么做?我正在做SHA1哈希算法。
答案 0 :(得分:14)
这是不可能的。 SHA1是非常谨慎和谨慎的one-way function。
您为什么要恢复原始密码?身份验证不需要它,因为您只需对输入密码进行哈希处理并比较哈希值。
如果是因为用户忘记了密码,那么标准练习似乎会生成随机重置链接并通过电子邮件发送给用户。
答案 1 :(得分:3)
你做不到。 hash function(与encryption相对)的要点是它是单向过程。换句话说,可能有多个密码散列到相同的值,并且无法从散列转到原始密码。
这很有用,因为您不需要任何类型的“主密码”或双向加密所需的其他秘密 - 但它确实意味着您永远无法从散列值中取回原始密码。如果您确实需要密码,则必须使用加密/解密而不是散列。
答案 2 :(得分:3)
你不能这样做,这是哈希函数的重点。实际上,多个密码可以为您提供相同的哈希值,因此即使您找到一个字符串来提供此哈希值,也可能不是正确的哈希值。
如果您需要找回密码,请不要使用类似RSA的哈希。
您可以阅读以下链接:
答案 3 :(得分:3)
关于该主题的两篇有趣文章:You're Probably Storing Passwords Incorrectly和Rainbow Hash Cracking ...
因此,这取决于您打算做什么(密码存储安全或为网站上的用户存储密码等)。对于以前的用法,您可以查看KeePass的工作原理(它是开源的)。
答案 4 :(得分:2)
你不能,这就是哈希所代表的。因此,许多站点都可以选择重置密码(即将您提供的新密码的哈希值放入db中)。 您通常找不到检索当前密码的选项(即通过邮件将其发送给您)。
如果某个网站确实提供此功能,则表示他们不存储密码哈希值,但无论是纯文本密码还是加密密码。由于存储哈希是最佳实践,因此您应该从提供密码检索的位置明确指出。
你应该避免自己开发这样一个网站; - )
答案 5 :(得分:1)
如果您没有使用salt,则可以使用dictionary attack来破解密码。
编辑:我意识到他最初的问题是如何检索他存储的密码,但是我很乐意为问题标题隐含的更通用的问题提供解决方案。答案 6 :(得分:0)
理论上你不能像其他评论所提到的那样。
我认为Rick试图说,如果攻击者知道你使用SHA1算法进行散列和你正在使用的盐,他们可以将哈希映射到密码以尝试检索密码。
但要回答你的问题:不,你不能轻易做到这一点。
答案 7 :(得分:0)
这里没有意义的粗鲁,但你真的明白为什么你首先要密码密码吗?