2016-02-18 2 views
0

Я искал свои мозги и сеть, почему это не работает. Я пытаюсь написать код для проверки контрольных сумм IDAT и тестирования, когда я иду с образцом хорошего изображения. Мой код:Расчет контрольных сумм IDAT в python

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 из-за целостного подписания.