预测未来的 CRC 值

Predicting Future CRC Value

以下代码显示了在前向哈希中使用的 CRC32(我们使用持久上下文对同一项目进行多次哈希):

In [1]: from zlib import crc32

In [2]: crc32('aaaa')
Out[2]: -1382488763

In [3]: crc32('aaaa',-1382488763)
Out[3]: -1081835450

In [4]: crc32('aaaa' * 2)
Out[4]: -1081835450

我的问题是: 给定-1382488763的已知初始crc,我们是否可以在不知道原始内容的情况下预测前向哈希的值?澄清一下...我可以单独从 -1382488763 导出 -1081835450 吗?

没有。 crc32() 采用初始 CRC,将消息应用于它,并获得生成的 CRC。您需要留言。

如果您可以在不知道 aaaa 的情况下确定 crc32('aaaa',-1382488763),那么为什么 crc32() 函数根本不需要第一个参数?

如果您想知道是否可以仅在给定未重复消息的 CRC 的情况下计算重复消息的 CRC,那么不能。但是,如果您知道消息的 CRC 消息的长度,那么是的,您可以在不知道消息本身的情况下计算该消息的两次或多次重复的 CRC。正如您在评论中指出的那样,这就是 zlib 中的 crc32_combine() 所做的。

是的,从某种意义上说,你可以。只有一个 4 字节的值:"AAAA" 产生特定的校验和。所以有可能找到这个值 if 你知道输出 - 例如通过遍历所有可能的字节输入。然后您可以通过再次提供上一条消息来扩展 CRC32 计算来猜测下一个输出。

备注:

  • 我假设这里使用 ASCII 编码;
  • CRC32 不是单向 散列,因此您可以计算有关输入消息的信息而无需恢复为蛮力;
  • 我不清楚你为什么要重复初始输入消息,我希望知道:)