PNG图片CRC校验码的计算过程和总结

这篇博客探讨了PNG图片HIDR Chunk中的CRC校验码计算过程,通过00 00 00 0D 49 48 44 52等数据,展示了如何验证计算出的CRC校验码4B CA 13 C2的正确性。文章使用代码验证和综合分析的方法,解释了CRC校验码的计算原理。
摘要由CSDN通过智能技术生成

/*

问题:一张PNG图片HIDR Chunk中的数据为:

00 00 00 0D 49 48 44 52 00 00 00 DC 00 00 00 DC 10 06 00 00 00 4B CA 13 C2

Chunk Type Code域和Chunk Data部分是:49 48 44 52 00 00 00 DC 00 00 00 DC 10 06 00 00 00

如何验证用该数据计算得到的CRC校验码是:4B CA 13 C2 ?

下面是代码验证过程代码和总结。

方法:用比较法来验证,为了得到结果综合法分析结合转换思想,逐步推进。

*/
# include <stdio.h>
# include <string.h>
/*1.char*,unsigned char*,char,unsigned char的理解
char*,unsigned char*记录的就是二进制转换到的十六进制的字节码[整(整数补码(正整数还是原码负整数补码),浮点数IEEE74原码,字符编码原码),
存放顺序是先入先存放的,超过一个字节就会区分大小端存放。char*,unsigned char*指针转换到char,unsigned char会转换到字符类型。
但是char,unsigned char整数运算还是十六进制的字节码(包括位运算之类),所以可以提供十六进制整数序列,用整数指针访问序列每个元素(对于十六进制的字节码直接进行CRC计算。
如果希望char,unsigned char整数运算,能得到从整数来的值那么需要截取一个字节来处理;或者采用结构体赋予整型值放置在内存或者二进制文件中读取出来,然后一个个char,unsigned char整数运算
处理。

 2.大小端转换,png图片数据是用Big-Endia
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: PNG(Portable Network Graphics)是一种无损压缩的图像格式,它使用CRC(循环冗余校验)算法来生成并验证图像的检验码。 CRC是一种校验算法,用于检测数据传输或存储中的错误。它将数据视为一个多项式,并通过除法运算来计算CRC值。在PNG图像中,CRC用于检验数据块的完整性,以确保图像数据没有损坏或遭到篡改。 PNG图像由多个数据块(Chunks)组成,其中包括图像数据、元数据、调色板等信息。每个数据块都有一个4字节的CRC校验码,位于数据块的结尾处。CRC校验码由数据块的类型字段和数据字段一起计算得出。 CRC校验计算公式如下: 1. 首先,将数据块的类型字段和数据字段连接起来,形成一个新的数据序列。 2. 初始化一个CRC校验值为0xFFFFFFFF。 3. 遍历数据序列的每个字节,按位异或运算更新CRC校验值。 4. 对于每个字节,进行8次循环,每次循环右移1位并判断最低位是否为1,若是,则与预先定义的多项式0xEDB88320按位异或。 5. 循环结束后,对CRC校验值进行按位取反操作。 6. 最终的CRC校验码即为取反后的CRC校验值。 使用CRC校验码可以验证图像数据在传输或存储过程中的完整性和正确性。在接收或读取PNG图像时,可以重新计算CRC校验码并与原来的校验码进行比较,若二者相等,则可以确认图像数据没有损坏或被篡改。这对于保证图像质量和完整性非常重要。 ### 回答2: PNG(Portable Network Graphics)是一种无损压缩的图像文件格式,其中的CRC(Cyclic Redundancy Check)是一种用于验证数据完整性的校验码。 PNG图像文件在存储时,会对图像数据进行压缩和编码处理。而CRC检验码则是在编码过程中生成的一串16位二进制数,用于验证图像数据在传输或存储过程中是否发生了变化或损坏。 CRC检验码的计算过程如下: 1. 初始化一个16位的寄存器,将其值设置为全1。 2. 将待计算的数据按字节或按位逐个与寄存器的值异或操作。 3. 对于每个被异或的字节(或位),将寄存器向右移动一位,并在最高位上填充0。 4. 若寄存器最右边的位为1,则将寄存器的值与一个预设的常数多项式进行异或操作。 5. 重复步骤2到4,直到所有的数据都被处理完。 6. 最后,将得到的寄存器值作为CRC校验码。 CRC检验码的应用可以有效地检测到数据传输过程中的误码和损坏。当接收端接收到数据后,同样按照上述步骤计算接收到的数据的CRC值,并将其与发送端传输的CRC值进行比较。若两个值不相等,则说明数据发生了变化或损坏。 通过使用CRC检验码,可以提高数据的完整性和可靠性,保证在数据传输和存储过程中数据的完整性。因此,CRC检验码在PNG图像文件中的计算和应用起到了重要的作用。 ### 回答3: PNG图片CRC(循环冗余校验)检验码是一种校验方法,用于验证数据的完整性和准确性。它通过计算数据块中每个字节的值,并执行一系列比特操作来生成一个32位的CRC值。 CRC检验码计算过程如下: 1. 初始化CRC寄存器为全1(0xFFFFFFFF); 2. 逐个读取数据块中的每个字节; 3. 将当前字节的值与CRC寄存器的低8位进行异或运算; 4. 重复8次,每次进行一次循环: - 如果CRC寄存器的最低位为1,则右移一位,并将0xEDB88320与CRC寄存器进行异或运算; - 如果CRC寄存器的最低位为0,则只右移一位; 5. 重复步骤2~4,直到处理完所有的字节; 6. 将最终的CRC寄存器的值取反,即得到CRC检验码。 这个32位的CRC检验码可以用于验证PNG图片中的数据是否被篡改或损坏。当CRC值与存储在PNG文件中的CRC校验码相匹配时,说明数据完整和准确;如果不匹配,则说明数据可能已经被修改或损坏。 通过使用CRC检验码,PNG图片可以确保数据的完整性,提高数据传输的可靠性,并防止数据在传输过程中出现错误。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值