最近几天钻了好一阵CRC(循环冗余校验),搞不懂他是怎么回事???在网上找了几篇文章也是说的不清楚,还好现在弄明白了
我要计算png图片中的crc32校验和,因为改变png图片中某数据块的数据后,按照标准规定需要从新计算校验和写入文件(实际上不更新校验和,图片一般也能用)。
1> crc32原理 : 带模2运算的多项式长除法,求余数
基本思路:对于一串数据d,d的二进制序列对应的多项式除以32位生成多项式g(x)
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
对应于0X04c11db7,X^32的系数隐藏在算法中。
2> png中的crc32原理: 与标准crc32有所不同,对数据处理前后各做了一些处理
(初始余数寄存器为全一,最终余数取反(据w3c标准规定))
3> 注意:
对数据流的对待方式为,原数据以八位的字节流为例,每一字节的高位被视为低位,每一字节的低位被视为高位,全部数据从高位到低位的顺序处理,例
原数据:10010110 11001101 10101110 10001011 (1)
被认为的数据:01101001 10110011 01110101 11010001 (2)
即实质的运算为二进制序列(2)对应的多项式除以生成多项式g(x)
4> 说明:
实际算法中有寄存器左移和右移两种方式,左移需要把每字节数据反转,g :0x04c11db7 ;右移则可以把寄存器反转过来用,高位做低位,低位做高位,省去了字节反转的操作,g:0xedb88320。实际应用中使用右移查表的方式
按位右移算法:

本文介绍了PNG图片中的CRC32校验和计算原理,包括CRC的基本概念、PNG中的CRC32处理差异、数据处理注意事项以及实际算法实现。通过对原始数据的特定处理和多项式除法,可以计算并更新PNG文件的CRC32值,确保数据完整性。
最低0.47元/天 解锁文章
7353

被折叠的 条评论
为什么被折叠?



