如何从生成的 sha256 校验和中取回文件?

逆向工程 加密 散列函数
2021-07-06 17:59:32

标题似乎有点疯狂,但我认为这是可能的。考虑一下。如果您创建这样的文本文件:

Hello world!

你得到这个校验和:

0ba904eae8773b70c75333db4de2f3ac45a8ad4ddba1b242f0b3cfc199391dd8

但是,如果您像这样更改任何字母:

Hallo world!

你得到这个:

bf1adae4567d9fb6b3bfb30cbf4dfdd2503e89a831cf3472c399b39fb9c73289

这意味着,如果我更改任何字母,我总是会得到另一个校验和,因此必须有任何方法可以取回源文件。

我的问题是:有没有办法在不创建所有可能的组合和检查校验和的情况下取回源文件?

2个回答

这实际上是密码散列函数的主要属性之一正如维基页面中提到的,它们被设计成无法逆转:

除非尝试所有可能的消息,否则从其哈希值生成消息是不可行的

此外,指示消息中的微小变化将导致完全不同的输出值的属性也是加密哈希的要求:

对消息的小改动应该会如此广泛地改变散列值,以至于新散列值看起来与旧散列值不相关

真正实现这一目标的唯一方法是尝试所有可能性(这在今天的计算能力下是不可能的)或找到散列机制中的弱点。

如今,由于这些弱点MD5SHA1被认为已损坏分别参见此处此处

但是,有缓存或公共字符串及其不同的哈希值,并且可以在线找到一些消息值。https://crackstation.net/就是这样一个包含许多哈希函数的存储库。

例如,0ba904eae8773b70c75333db4de2f3ac45a8ad4ddba1b242f0b3cfc199391dd8您作为示例给出的哈希可以在这里找到

不,没有。散列和校验和的行为都会在此过程中丢失信息。因此,可以有多个文件产生相同的散列和相同的校验和知道您已恢复原始文件的唯一方法是将其与原始文件进行比较。