图片格式的crc校验

png格式的图片,文件头是89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 

IHDR

文件头数据块

第一块

域的名称

字节数

说明

Width

4 bytes

图像宽度,以像素为单位

Height

4 bytes

图像高度,以像素为单位

Bit depth

1 byte

图像深度: 
索引彩色图像:1248 
灰度图像:124816 
真彩色图像:816

ColorType

1 byte

颜色类型:
0:灰度图像, 124816 
2:真彩色图像,816 
3:索引彩色图像,1248 
4:带α通道数据的灰度图像,816 
6:带α通道数据的真彩色图像,816

Compression method

1 byte

压缩方法(LZ77派生算法)

Filter method

1 byte

滤波器方法

Interlace method

1 byte

隔行扫描方法:
0:非隔行扫描 
1 Adam7(Adam M. Costello开发的7遍隔行扫描方法)

第二行前四位是宽,接下来四位是高,0806是下边这个。后边的C1 D0 B3 D4 就是校验码。校验的范围从494844到000000

Bit depth

1 byte

图像深度: 
索引彩色图像:1248 
灰度图像:124816 
真彩色图像:816

ColorType

1 byte

颜色类型:
0:灰度图像, 124816 
2:真彩色图像,816 
3:索引彩色图像,1248 
4:带α通道数据的灰度图像,816 
6:带α通道数据的真彩色图像,816

crc校验的py2代码:

# -*- coding: utf-8 -*-
import binascii
import struct
crc32key = 0xC1D0B3E4
for i in range(0, 65535):
  height = struct.pack('>i', i)
  data = b'\x49\x48\x44\x52\x00\x00\x0C\xC0'+height+ b'\x08\x06\x00\x00\x00'

  crc32result = binascii.crc32(data) & 0xffffffff
  if crc32result == crc32key:
    print ''.join(map(lambda c: "%02X" % ord(c), height))
发布了125 篇原创文章 · 获赞 31 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Fiverya/article/details/104126369