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

Java 如何解密SHA-256加密字符串?,java,hash,cryptography,Java,Hash,Cryptography,我有一个字符串,它经过盐渍处理,用SHA-256散列,然后进行base64编码。有没有办法将此字符串解码回其原始值?是a,因此没有直接的解码方法。加密哈希函数的全部用途是您无法撤消它 您可以做的一件事是,猜测散列的内容,然后使用相同的函数对其进行散列,看看是否匹配。除非散列数据很容易猜测,否则可能需要很长时间 您可能会发现问题“”很有趣。应该注意-Sha256不会加密字符串的数据/内容,而是使用输入字符串作为种子生成固定大小的哈希 在这种情况下,我可以输入百科全书的内容,其文本大小很容易达到10

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

是a,因此没有直接的解码方法。加密哈希函数的全部用途是您无法撤消它

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


您可能会发现问题“”很有趣。

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

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

您不可能反转散列,要从固定大小的散列中恢复100mb的数据,您所能做的最好的事情是尝试猜测/计算种子数据,散列,然后查看散列是否与您尝试破坏的散列匹配


如果您可以反转散列,您将拥有迄今为止最强大的压缩形式。

您已经使用了salt,也就是SSHA,做了正确的事情

不含盐的SHA和SHA-2(或SHA-256)本身不再被认为是安全的!用盐腌制SHA杂烩被称为盐腌SHA或SSHA

下面是一个简单的示例,说明如何轻松地对SHA-1进行去哈希。同样,SHA-2也可以不费吹灰之力地完成

在此URL中输入密码: 将哈希复制粘贴到此URL中:

这是一个对SHA-2进行哈希运算的页面。此页面的工作方式是,必须有人对您的密码进行过哈希运算,否则它将找不到密码: MD5哈希点网/哈希/sha256

这里有一个页面声称有完整的SHA-2表格可供“捐赠”下载(我还没试过): crackstation.net/buy-crackstation-wordlist-password-cracking-dictionary.htm

下面有一篇好文章解释了为什么必须使用SSHA而不是SHA:
crackstation.net/hashing security.htm

SHA*是一个哈希函数。它创建原始数据的表示(散列)。此散列永远不会用于重新创建原始数据。因此它不是加密。相反,可以在相同原始数据的两个不同位置使用相同的哈希函数,以查看是否生成相同的哈希。此方法通常用于密码验证。

换句话说,如果您可以轻松地反转此函数,这将是一件非常糟糕的事情。如果真的很难重新生成实际数据,或者你说这是暴力策略,那么其他在线工具如何重新生成实际字符串?@safer他们有一个哈希函数的输出列表,然后查找输入是什么。它们实际上并没有解密;他们基本上是猜测,然后跟踪结果。是的,散列只是一种方法,对于长字符串来说,暴力是不可行的。也就是说,如果散列是一个密码,那么可以使用不同的策略来确定原始明文是什么。它通常涉及一些预先计算的已知密码哈希列表、一整本字典或彩虹表。有许多服务正致力于做到这一点。正是这样做的,并且有方便的restful API。@更安全的是:要添加到其他注释中,还有一个事实,即MD5多年前就已经通过加密方式被破坏。“如果您可以反转哈希,您将拥有迄今为止最强大的压缩形式。”不,不是真的。“反转哈希函数”指的是查找冲突。没有人真正关心找到准确的原始输入。因此,反转散列函数只会产生一个乱码生成器。是的,任何散列算法的不同输入都可能在统计上发生冲突,最明显的是sha-1和md5,一些较旧的散列例程。它们只是在sha2家族中还没有出现过。给定一个mp4-Thor Ragnarok,当你使用256位时,它的大小是1GB,如果你能从256位的散列中得到1GB,那么你就得到了256位的散列,你就得到了256位的数据。如果它起作用,那么它将相当于一种压缩形式。但它永远不会起作用。验证哈希是否正确需要内容,这与目的背道而驰。Sha256是完美哈希函数的近似值,因此您可以期望每个可能的输出平均有一个长度为256位的其他输入映射到该输出。没有理由说成功的反转会返回原来的1GB输入,而它只能返回返回该输出的~256位输入中的一个,也就是说,你会得到一小段胡言乱语。因此,即使可以反转,也永远无法将其用于任何类型的压缩。