2015-02-13 4 views
1

Я пытаюсь вычислить контрольную сумму crc32 файла, но кажется, что мой код не вычисляет его правильно.CRC32 не вычисляет правильную контрольную сумму?

def crc32_checksum(directory): 
    file = open(directory, "r").read() 
    file_checksum = str(binascii.crc32(file) & 0xffffffff) 
    return file_checksum 

Очевидно, что возвращает десятичную контрольную сумму (правильно?), Но когда я преобразовать его в шестнадцатеричный, это, кажется, не совпадает (я использую один из тех десятичных заколдовать сайты).

я получаю это как возвращение Python: 2370036543 (8D43E33F) и контрольная сумма, что DigitalVolcano HashTool 1.1 Скачал возвращает это: (300654116) 11eb9e24.

Я уверен, что hashtool правильный, поскольку я сравнивал контрольные суммы, используя его (и они совпадали).

У меня работает Windows.

+0

@davidism Как это ни странно, я не думаю, что возможный дубликат действительно отвечает на этот вопрос окончательно. Возможно, этот вопрос получит более точный ответ? – BlackVegetable

+0

Даже если это был дубликат этого вопроса (а это не так), на этот вопрос никогда не отвечали. –

+0

И это не дубликат. Этот вопрос заключался в сравнении crc32 с неизвестным инструментом (многократно запрошенном в комментариях, но никогда не указанным), с возможными разными данными для двух разных инструментов. Это по сравнению с известным инструментом (hashtool), с очень вероятными разными данными. –

ответ

3

Вы не говорите, в какой системе вы это делаете, но вам может потребоваться открыть с помощью «rb» вместо «r», чтобы гарантировать отсутствие перевода строк на чтение данных. Положительная практика заключается в том, чтобы в любом случае сделать это переносимостью и документировать, что вы рассматриваете ввод как двоичные данные.

+0

Хотя замечание об открытии файла в двоичном режиме почти наверняка является причиной здесь, ваш пост - это не более чем комментарий. ОП должен был просто включить здесь более подробную информацию. –

+0

Я использую Windows. Я поместил строку «Я пользователь» в текстовый файл и сравнил, и результаты были одинаковыми. Извините за то, что я не вдавил много деталей. Я постараюсь исправить столько, сколько смогу. – user3371785

+0

Марк прав. Это исправило мою проблему. Спасибо, Марк, и всем, кто помог. (Извините за то, что вы такой дрянной пользователь. В следующий раз я буду лучше, я обещаю.: P) – user3371785