CRC32算法笔记

Posted likevirgo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRC32算法笔记相关的知识,希望对你有一定的参考价值。

这几天在研究CRC32的计算过程,看了CRC算法的原理,也看了不少通过移位法实现的代码,但是算出的结果跟校验工具算的不一致。

折腾了好长时间,终于找到一个手工计算CRC32的文章,再对照IEEE 802.3标准的CRC计算过程,才算把CRC32的计算搞定。

这里把计算过程的要点记录一下:

1) CRC32是CRC算法一种,先参考Wiki上CRC算法的原理和实例搞明白基本的计算方法。

2) 最常见的CRC32算法就是IEEE 802.3里生成FCS字段用的那个:

a) CRC32使用的Polynomial是 技术分享图片

b) IEEE 802.3在传送数据时使用的是最低有效位优先 (least significant bit first),所以要根据你机器的架构转换成有效的比特流输入。同理,输出流也一样。

c) 为了有效识别输入流开头和结尾的零,开头的32位要按位取反(complement),最后计算出的余数也要按位取反。

按照上述方法计算能得到想要的CRC32值了。

以上是关于CRC32算法笔记的主要内容,如果未能解决你的问题,请参考以下文章

CRC32加密算法的识别

快速CRC算法?

分析数据摘要算法的效率性能(SHAMD5和CRC32)

求助crc32的原理

CRC32的计算方法

C语言实现CRC32算法