*使校验和无效的最佳方法

时间:2011-06-12 22:32:39

标签: checksum invalidation crc32

假设我有一个4KB的缓冲区,它在开始时包含校验和。此缓冲区包含引用其他缓冲区的元数据。注:缓冲区是内存映射文件。我注意到其中一个缓冲区无效(校验和无效或OR校验和正常,但它引用了无效的缓冲区)。现在,我想使引用另一个无效缓冲区的缓冲区无效。什么是使缓冲区无效的数学最佳方法?破坏校验和本身,使其可能与数据不匹配或损坏数据,因此可能与校验和不匹配。或者还有第三种更好的方法吗?值得一提的是,这是一个CRC32变体。

1 个答案:

答案 0 :(得分:1)

假设您的引用缓冲区的CRC有效,您只需从中减去一个,这将使您的缓冲区无效。从您的描述中可以看出,因为您声明引用的缓冲区是CRC可能错误的缓冲区。

如果引用CRC32 不是有效,最安全的选择是计算CRC 然后减去1。您需要首先知道正确的CRC,因为随机选择CRC,而不太可能是正确的CRC,仍然有大约四十亿的正确机会。

更改CRC似乎是最安全的选择。如果没有对CRC32算法进行数学分析,就无法保证对数据的特定更改不会生成相同的 CRC值(因为大量数据集可能映射到同样的CRC)。

但是,确定特定的数据集将始终生成相同的CRC,因此,通过将CRC更改为其他内容,您可以确定该块现在将无效。