1

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

4

1 回答 1

2

假设您的参考缓冲区的 CRC 是有效的,您只需从中减去一个,这将使您的缓冲区无效。根据您的描述,这似乎是这种情况,因为您声明引用的缓冲区是其 CRC 可能错误的缓冲区。

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

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

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

于 2011-06-12T22:38:57.370 回答