Hash 预测未来CRC值

Hash 预测未来CRC值,hash,cryptography,crc,crc32,Hash,Cryptography,Crc,Crc32,下面的代码显示了在前向散列中使用的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 我的问题是: 给定已知的初始crc为-1382488763,

下面的代码显示了在前向散列中使用的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
我的问题是: 给定已知的初始crc为-1382488763,我们可以在不知道原始内容的情况下预测前向散列的值吗?为了澄清。。。我能否仅从-1382488763推导出-1081835450?

否。crc32获取初始CRC,将消息应用于该CRC,并获取结果CRC。你需要留言

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


若你们想知道你们是否可以计算一条消息重复的CRC,只给出未重复消息的CRC,那个么答案是否定的。然而,若你们知道消息的CRC和消息的长度,那个么你们可以计算该消息重复两次或更多次的CRC,而不知道消息本身。正如您在评论中所注意到的,这就是zlib中crc32_组合的功能。

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

注:

我在这里假设ASCII编码; CRC32不是单向散列,因此您可以在不恢复暴力的情况下计算输入消息的信息; 我不清楚您为什么要重复最初的输入消息,我希望您知道:
有很多方法可以优化重复项的crc计算,但您的问题是,是否可以在不知道重复项是什么的情况下进行优化。好的,请重新阅读您的问题。所以基本上你会问:知道我输入了4个元素,并且知道结果,我能确定地重建输入值aaaa吗?请注意,crc32'aaaa',-1382488763对我来说没有任何意义。CRC32有一个输入参数。如果有两个参数,请指定其含义。@MaartenBodewes根据它被用作生成运行校验和的起始值。@MaartenBodewes crc32'aaaa',-1382488763表示使用第二个参数作为初始CRC,并通过它运行消息aaaa。因此,它应该给出与拿AAAAA的CRC相同的东西,这[4]确实证明了这一点。也许我可以更彻底地说明。。。虽然我不知道校验和缓冲区的内容,但我知道它的长度。假设我以前控制过它,获取了它的crc,然后删除了它。我通过使用您有用的crc32_组合函数解决了这个问题。谢谢我还是不明白。如果您只知道-1382488763后跟四个字节,但您不知道这些字节,那么您无法预测结果-1081835450。你需要知道这些字节,或者至少你需要知道它们的CRC使用相同的多项式。是的-我知道这些字节,因为它们总是相同的,我反复对同一项进行校验和,将输出循环回以下输入。问题是既不知道消息,也不知道结果的CRC,你能确定结果的CRC吗。显然不是。是的,如果你知道消息,你可以得到CRC,如果你知道CRC,你可以得到32位消息。顺便说一句,这个消息可以用简单的线性代数很快地解决。所以,是的,你不需要强迫它。我很清楚,组织。这个信息要重复。当然,如果你不知道你要计算什么,你就不能计算任何散列。但在这种情况下,你1。可以计算中间校验和2的原始值。提供给中间CRC32,以计算最终金额。所以我回答了这个问题:如果我有一个超过4个字符的中间散列,比如AAAA,我能计算出AAAA上的散列吗。是的,这是可能的。我只是按照问题实际说的去做,这是为了澄清。。。我能从-1382488763单独推导出-1081835450吗?显然,澄清的理由并没有澄清这个问题。我同意,这个问题仍然不清楚。这是我们能做的最好的了——除了投票结束,我已经做了。