crc32 多项式是什么?

crc32 多项式是什么?

crc32 使用的多项式是什么?ANSI X3.66 CRC-32 是 0x104C11DB7。crc32 的手册页未指明其使用的多项式。

答案1

这个问题的表述方式与主题无关,但我会尝试通过解决如何以一般方式搜索依赖 Perl 模块的工具的文档来使其切中主题;顺序如下:

  1. man <tool>

    man crc32

           This utility is supplied with the Archive::Zip module for Perl.
    
  2. perldoc <module>

    perldoc Archive::Zip

        Archive::Zip::computeCRC32( $string [, $crc] )
        Archive::Zip::computeCRC32( { string => $string [, checksum => $crc ] } )
            This is a utility function that uses the Compress::Raw::Zlib CRC
            routine to compute a CRC-32.
    

    递归应用,直到某些方法有效或到达“根”模块;在这种情况下,递归以 结束perldoc Compress::Raw::Zlib,无效;

  3. 挖掘“root”模块的源代码

    生成多项式逐字节 32 位 CRC 计算表:x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1。

    GF(2) 上的多项式以二进制表示,每个系数占一位,最高有效位中存在最低幂。然后多项式相加只是异或,而将多项式乘以 x 则是右移一位。如果我们将上述多项式称为 p,并将一个字节表示为多项式 q,同样最高有效位中存在最低幂(因此字节 0xb1 是多项式 x^7+x^3+x+1),则 CRC 为 (q*x^32) mod p,其中 a mod b 表示将 a 除以 b 后的余数。

    此计算使用移位寄存器方法进行,即相乘并取余数。寄存器初始化为零,对于每个传入位,如果该位为 1,则将 x^32 mod p 添加到寄存器(其中 x^32 mod p 为 p+x^32 = x^26+...+1),然后将寄存器乘以 x mod p(即右移一位,如果移出的位为 1,则将 x^32 mod p 相加)。我们从 q 的最高幂(最低有效位)开始,然后对 q 的所有八位重复此操作。

    第一个表只是所有可能的八位值的 CRC。这是针对所有 CRC 寄存器值和传入字节的组合逐字节生成 CRC 所需的全部信息。其余表允许对大端和小端机器逐字计算 CRC,其中一个字为四个字节。

相关内容