CRC32与CRC32C?

Wir*_*nto 27 hash checksum

CRC32和CRC32C有什么区别?我知道CRC32很长一段时间了,但今天刚听说CRC32C.它们基本上是相同的方法(即两者都导致给定数据的相同哈希)?

Dar*_*zka 40

在zip和很多其他地方发现的CRC32使用多项式0x04C11DB7; 它的反转形式0xEDB88320可能更为人所知,通常在小端实现中找到.

CRC32C使用不同的多项式(0x1EDC6F41,反向0x82F63B78),否则计算是相同的.结果自然是不同的.这也被称为Castagnoli CRC32,并且在较新的Intel CPU中最为明显,它可以在3个周期内计算完整的32位CRC步长.这就是CRC32C变得越来越流行的原因,因为它允许高级实现,即使有三个周期的延迟(通过并行处理3个数据流并使用线性代数组合结果),每个周期有效处理一个32位字).

  • 有没有办法在CRC32和CRC32C之间进行转换?看一些[带注释的内核补丁](https://lwn.net/Articles/292984/),它可能是可能的,但没有解释. (3认同)
  • @jww:如果有可能,那么它至少必须和将连续块的CRC拼接在一起一样复杂(例如计算“虚拟原像”)。我从未见过像这样的算法,尽管它的效用很明显(例如使用CRC32C的硬件指令并将结果转换为标准(zip)CRC32)。快速获得答案的最佳方法是自行将其发布为问题。我的+1是给定的。;-) (2认同)
  • 次要的:crc32指令可以处理* 8 *字节(64位),因此具有3个周期的延迟,顺序吞吐量约为〜2.67个字节/周期,最佳的3x并行版本接近8个字节/周期。 (2认同)