2014-10-17 108 views
16

CRC32和CRC32C有什么区别?我长期知道CRC32,但今天刚刚听到CRC32C。它们基本上是相同的方法吗(即对于一个给定的数据都产生相同的哈希)?CRC32 vs CRC32C?

回答

24

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

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

+3

有没有办法在CRC32和CRC32C之间进行转换?看一些[内核补丁与评论](https://lwn.net/Articles/292984/),这可能是可能的,但它没有解释。 – jww 2016-04-24 13:50:45

+1

@jww:如果有可能,那么它必须至少像连续块拼接CRC一样复杂(如计算'虚像素')。我从来没有见过这样的算法,虽然它的实用性很明显(比如使用CRC32C的硬件指令并将结果转换为标准(zip)CRC32)。快速获得答案的最佳方法是将其作为一个问题单独发布。我的+1是给定的。 ;-) – DarthGizka 2016-04-24 14:59:19