在有小的覆盖的情况下进行有效的整个文件CRC计算

问题描述 投票:0回答:1

我有一个大文件,我对其内容维护crc32校验和。如果文件的固定部分在文件的开头或文件末尾进行了更改,我可以维护静态部分和动态部分的crc32校验和,并使用crc32_combine有效地计算新的整个文件校验和。马克·阿德勒(Mark Adler)在这里回答得很漂亮:CRC Calculation Of A Mostly Static Data Stream

但是,如果文件中间的内容发生更改,并且不总是以预定义的偏移量(和长度)更改,是否有一种方法可以有效地计算整个文件的校验和,而无需读取整个文件?

checksum crc32
1个回答
0
投票

是的,只要您知道字节的前后值都已更改。当然还有它们的位置。

计算之前和之后的异或。在没有变化的地方为零,在没有变化的地方为非零。然后计算整个文件的异或的原始CRC,然后使用CRC计算异或的结果。

大概您将有一个长的零序列,一些非零值,然后是另一个长的零序列。您可以忽略初始的长序列,而只是开始计算非零值的CRC。然后,在链接中使用相同的技巧将长的零序列应用于原始CRC。

© www.soinside.com 2019 - 2024. All rights reserved.