2016-02-18 188 views
0

我一直在绞尽脑汁,为什么这不起作用。我正在尝试编写一些代码来验证IDAT校验和,并随着样本的良好映像进行测试。我的代码是:在Python中计算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提供正确的输出。

缺什么?

在此先感谢。

回答

0

哇,我是个白痴!我之前检查过这个时候,当我发现有问题的时候,我认为我已经在这种情况下检查了它。由于整数签名,我只需要&它与0xffffffff。