使校验和“无效”的最佳方法

问题描述

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

解决方法

        假设引用缓冲区的CRC有效,则只需从中减去1,就可以使缓冲区无效。从您的描述来看,情况似乎是这样,因为您声明所引用的缓冲区是CRC可能是错误的缓冲区。 如果引用的CRC32无效,则最安全的选择是计算CRC,然后减去1。您需要首先了解正确的CRC,因为尽管随机选择CRC不太可能是正确的,但仍然有大约四十亿分之一的正确机会。 更改CRC似乎是最安全的选择。缺少对CRC32算法进行数学分析的方法,无法保证对数据的特定更改不会生成相同的CRC值(因为大量数据集可能映射到相同的CRC) 。 但是,可以确定的是,特定数据集将始终生成相同的CRC,因此,通过将CRC更改为其他值,可以确保该块现在将无效。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...