【发布时间】:2012-03-08 03:43:57
【问题描述】:
我有一个经过加盐处理的字符串,使用 SHA-256 进行哈希处理,然后进行 base64 编码。有没有办法将此字符串解码回其原始值?
【问题讨论】:
标签: java hash cryptography
我有一个经过加盐处理的字符串,使用 SHA-256 进行哈希处理,然后进行 base64 编码。有没有办法将此字符串解码回其原始值?
【问题讨论】:
标签: java hash cryptography
SHA-256 是cryptographic (one-way) hash function,所以没有直接的解码方法。加密哈希函数的全部目的是您无法撤消它。
您可以做的一件事是brute-force strategy,您可以在其中猜测散列的内容,然后使用相同的函数对其进行散列,看看是否匹配。除非散列数据很容易猜到,否则可能需要 很长 时间。
您可能会发现“Difference between hashing a password and encrypting it”这个问题很有趣。
【讨论】:
应该注意 - Sha256 不会加密您的字符串的数据/内容,而是使用您的输入字符串作为种子生成一个固定大小的散列。
在这种情况下 - 我可以输入一个百科全书的内容,它的文本大小很容易达到 100 mb,但生成的字符串仍然是 256 位大小。
你不可能反转散列,从固定大小的散列中取回 100mb 的数据,你能做的最好的就是尝试猜测/计算种子数据、散列,然后看看散列是否与您尝试破解的哈希匹配。
如果您可以反转哈希,您将获得迄今为止最大的压缩形式。
【讨论】:
SHA* 是一个散列函数。它创建原始数据的表示(散列)。此散列绝不打算用于重新创建原始数据。因此,它不是加密。相反,可以在相同原始数据的 2 个不同位置使用相同的散列函数,以查看是否产生了相同的散列。此方法常用于密码验证。
【讨论】:
您已经通过使用盐(即 SSHA)做了正确的事情。
SHA 和 SHA-2(或 SHA-256)本身没有盐就不再被认为是安全的!对 SHA 哈希进行加盐称为加盐 SHA 或 SSHA。
下面是一个简单的示例,说明如何轻松地对 SHA-1 进行去哈希处理。 SHA-2 也可以不费力气地做同样的事情。
在此 URL 中输入密码: http://www.xorbin.com/tools/sha1-hash-calculator 将哈希复制粘贴到此 URL: https://hashes.com/en/decrypt/hash
这是一个去散列 SHA-2 的页面。此页面的工作方式是必须有人之前已经对您的密码进行了哈希处理,否则它将找不到它: md5hashing dot net/hashing/sha256
这是一个声称有完整的 SHA-2 表可供“捐赠”下载的页面(我还没有尝试过): Crackingstation dot net/buy-crackstation-wordlist-password-cracking-dictionary.htm
这是一篇很好的文章,解释了为什么必须使用 SHA 而不是 SHA: 破解站点网/hashing-security.htm
【讨论】: