1
1
那里 是 解决这个问题的数学方法,但我不知道。我提出了一个暴力解决方案: 一个块看起来是这样的:
每个字符代表一个字节。S=起始字节,M=可以修改的字节,E=结束字节。
在将每个字节添加到CRC之后,它具有一个新的内部状态。您可以重复使用校验和状态,直到您修改的位置。您只需要重新计算修改后的字节和以下所有字节的校验和。因此,计算
您也不需要重新计算以下字节。您只需要在进行修改后检查CRC状态是相同还是不同。如果它是相同的,那么整个块也将是相同的。如果不同,整个区块可能会不同(不能保证,但你应该中止试验)。所以你只计算
这样一来,您要处理的数据就少得多,而且最近的台式机或服务器可以完成
|
2
0
看看 spoof.c 。这将直接解决您对4K块的CRC的问题。然而,您需要修改代码,以同时解决4K块的CRC和封闭32K块的CRC的问题。这只是一个添加更多方程来求解的问题。代码非常快,运行在O(log( n ))时间,其中 n 是消息的长度。 基本思想是,您需要在32个或更多的未知数中求解GF(2)上的32个线性方程,其中每个未知数都是您允许更改的位位置。提供超过32个未知数来解决问题是很重要的,因为如果你正好选择32个未知数,那么你最终得到一个奇异矩阵而没有解的可能性就不大了。欺骗码将自动地从>32。 |