在python中计算IDAT校验和

时间:2016-02-18 17:07:11

标签: python png zlib crc32

我一直在绞尽脑汁和网络,为什么这不起作用。我正在尝试编写一些代码来验证IDAT校验和,并在测试时使用示例良好的图像进行测试。我的代码是:

import binascii
import zlib

filename="sample.png";
with open(filename, 'rb') as f:
    data=f.read()

index=data.find("IDAT");
print index;

idat=data[index:index+0x200+4]
print "IDAT: "+binascii.hexlify(idat)

crc=data[index+0x200+4:index+0x200+8]
print "CRC: "+binascii.hexlify(crc)

ccrc=zlib.crc32(idat)
print"Calculated CRC: "+hex(ccrc)

它给出的输出是:

python crc.py
190
IDAT: 494441546881edd6cd6...........<snip>
CRC: ce1f4dd7
Calculated CRC: -0x31e0b229

正在从正确的位置读取校验和。 IDAT标头和数据正在校验和。我已经使用其他工具验证了从文件中读取的校验和是否正确。根据我的研究,zlib的默认设置应该为CRC32提供正确的输出。

缺少什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

哇,我是个白痴!我早些时候检查过这个问题,然后我认为在这种情况下我已经检查过了。我只需要&amp;由于整数签名,它与0xffffffff一起使用。