2016-02-18 184 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。