如何解密 SHA-256 加密字符串?

Posted

技术标签:

【中文标题】如何解密 SHA-256 加密字符串?【英文标题】:How to decrypt a SHA-256 encrypted string? 【发布时间】:2012-03-08 03:43:57 【问题描述】:

我有一个经过加盐处理的字符串,使用 SHA-256 进行哈希处理,然后进行 base64 编码。有没有办法将此字符串解码回其原始值?

【问题讨论】:

【参考方案1】:

SHA-256 是cryptographic (one-way) hash function,所以没有直接的解码方法。加密哈希函数的全部目的是您无法撤消它。

您可以做的一件事是brute-force strategy,您可以在其中猜测散列的内容,然后使用相同的函数对其进行散列,看看是否匹配。除非散列数据很容易猜到,否则可能需要 很长 时间。

您可能会发现“Difference between hashing a password and encrypting it”这个问题很有趣。

【讨论】:

换一种说法,如果你能轻易地反转这个函数,那将是一件非常糟糕的事情。 如果它很难重新生成实际数据,或者你说它是暴力再生策略,那么md5decrypt.net/en 和其他在线工具的数量如何重新生成实际字符串? @Safeer 他们有一个哈希函数的输出列表,然后查找输入是什么。他们实际上并没有解密。他们基本上是在猜测,然后跟踪结果。 是的,散列只是一种方法,对于长字符串,暴力破解可能是不可行的。也就是说,如果哈希是密码,则可以使用不同的策略来确定原始明文是什么。它通常涉及某种预先计算的已知密码的哈希列表、整个字典或彩虹表。有许多服务致力于做到这一点。 crypto.apitools.zone/sha256-decode.html 会准确地做到这一点,并且有方便的 RESTful API。 @Safeer:添加到其他 cmets 也是一个事实,即 MD5 在多年前就已被加密。【参考方案2】:

应该注意 - Sha256 不会加密您的字符串的数据/内容,而是使用您的输入字符串作为种子生成一个固定大小的散列。

在这种情况下 - 我可以输入一个百科全书的内容,它的文本大小很容易达到 100 mb,但生成的字符串仍然是 256 位大小。

你不可能反转散列,从固定大小的散列中取回 100mb 的数据,你能做的最好的就是尝试猜测/计算种子数据、散列,然后看看散列是否与您尝试破解的哈希匹配。

如果您可以反转哈希,您将获得迄今为止最大的压缩形式。

【讨论】:

“如果你能反转散列,你将拥有迄今为止最大的压缩形式。”不,不是。 “反转散列函数”是指发现冲突。没有人真正关心找到确切的原始输入。所以你反转散列函数只会给你一个乱码生成器。 虽然是的 - 任何散列算法的不同输入都可能在统计上发生冲突,最值得注意的是 sha-1 和 md5 ,一些较旧的散列例程。它们只是还没有在 sha2 系列中发生。给定一个 mp4 - Thor Ragnarok,大小为 1GB 当你对其进行 sha256 处理时 - 你会得到一个 256 位的散列 如果你能从那个 256 位的散列中取回 1GB 你取 256 位的数据,得到 1GB 的数据。如果它起作用了——那么它就相当于一种压缩形式。尽管它永远不会起作用。验证哈希是否正确需要内容,这违背了目的。 Sha256 是完美哈希函数的近似值,因此您可以预期每个可能的输出平均有一个其他输入,其长度为 256 位,映射到该输出。没有理由成功的反转会返回原始的 1GB 输入,因为它可以只返回一个返回该输出的 ~256 位输入,即你会得到一小部分乱码。因此,即使您可以反转,也永远无法将其用于任何类型的压缩。【参考方案3】:

SHA* 是一个散列函数。它创建原始数据的表示(散列)。此散列绝不打算用于重新创建原始数据。因此,它不是加密。相反,可以在相同原始数据的 2 个不同位置使用相同的散列函数,以查看是否产生了相同的散列。此方法常用于密码验证。

【讨论】:

【参考方案4】:

您已经通过使用盐(即 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

【讨论】:

以上是关于如何解密 SHA-256 加密字符串?的主要内容,如果未能解决你的问题,请参考以下文章

AES128_CBC_NoPading加密、sha256withRSA签名

sas如何对数据进行sha256加密

使用sha256managed解密哈希

SHA256 加密后能不能解密

hmac-sha256 2021-11-02

国产接口工具ApiPost如何利用CryptoJS对请求参数进行MD5/AES加解密