使用 python 的二进制文件的 CRC16-CCITT
CRC16-CCITT for binary file using python
CRC16-CCITT 计算的最大文件大小是多少?
如果我将二进制文件拆分成256*1024的块,是否可以将每个块的crc结果相加来确定整个文件的CRC?
选择CRC-16CCITT和CRC-32CCITT的标准是什么?
CRC 对文件大小没有限制。但是,您的库应该支持以块的形式提供数据以计算 crc。简单地添加块的 CRC 值是行不通的 - 您必须使用前一个块的 CRC 作为下一个块 CRC 计算的起始值,并且需要您的库支持。
例如pycrc16 给出了这样做的例子:
import crc16
crc = crc16.crc16xmodem(b'1234')
crc = crc16.crc16xmodem(b'56789', crc)
关于 16 位与 32 位部分。一般来说,比特越多,冲突的可能性就越低,因此检测到错误的机会就越大。但这也强烈依赖于多项式以及 CRC 的其他参数。所以选择 right/best CRC 是一个很好的借口 war :o).
虽然我很担心 "CRC-32CCITT"。 CRC 名称有些随意,通常相同的名称指代不同的算法,而且许多算法有多个名称。但据我所知,"CCITT" 总是指 CRC-16 算法。因此,请注意 - 从 16 位简单扩展到 32 位并不是一个好主意,因为好的 16 位多项式通常不如 32 位多项式好。如果您更喜欢使用 32 位 CRC,我建议您选择合适的 32 位 CRC。请参阅 here 一个很好的 "known good" 参数集列表。
CRC16-CCITT 计算的最大文件大小是多少?
如果我将二进制文件拆分成256*1024的块,是否可以将每个块的crc结果相加来确定整个文件的CRC?
选择CRC-16CCITT和CRC-32CCITT的标准是什么?
CRC 对文件大小没有限制。但是,您的库应该支持以块的形式提供数据以计算 crc。简单地添加块的 CRC 值是行不通的 - 您必须使用前一个块的 CRC 作为下一个块 CRC 计算的起始值,并且需要您的库支持。
例如pycrc16 给出了这样做的例子:
import crc16
crc = crc16.crc16xmodem(b'1234')
crc = crc16.crc16xmodem(b'56789', crc)
关于 16 位与 32 位部分。一般来说,比特越多,冲突的可能性就越低,因此检测到错误的机会就越大。但这也强烈依赖于多项式以及 CRC 的其他参数。所以选择 right/best CRC 是一个很好的借口 war :o).
虽然我很担心 "CRC-32CCITT"。 CRC 名称有些随意,通常相同的名称指代不同的算法,而且许多算法有多个名称。但据我所知,"CCITT" 总是指 CRC-16 算法。因此,请注意 - 从 16 位简单扩展到 32 位并不是一个好主意,因为好的 16 位多项式通常不如 32 位多项式好。如果您更喜欢使用 32 位 CRC,我建议您选择合适的 32 位 CRC。请参阅 here 一个很好的 "known good" 参数集列表。