Расхождение хэша MD5 между Python и PHP?

Я пытаюсь создать контрольную сумму двоичного файла (flv / f4v и т. Д.), Чтобы проверить содержимое файла между сервером и клиентскими компьютерами. Приложение, работающее на клиентском компьютере, основано на Python, а сервер использует PHP.

Код PHP выглядит следующим образом:

$fh = fopen($filepath, 'rb');
$contents = fread($fh, filesize($filepath));
$checksum = md5(base64_encode($contents));
fclose($fh);

Код Python выглядит следующим образом:

def _get_md5(filepath):
    fh = open(filepath, 'rb')
    md5 = hashlib.md5()
    md5.update(f.read().encode('base64'))
    checksum = md5.hexdigest()
    f.close()
    return checksum

в конкретном файле, который я тестирую, хеш-строки PHP и Python md5 соответственно выглядят следующим образом:

cfad0d835eb88e5342e843402cc42764
0a96e9cc3bb0354d783dfcb729248ce0

Сервер работает под управлением CentOS, а клиент - это среда MacOSX. Я был бы очень признателен за любую помощь в понимании того, почему они генерируют разные хеш-результаты, или если это то, что я упустил (я относительно новичок в Python ...). Спасибо!

[post mortem: в конечном итоге проблема заключалась в различии между вариантами кодирования base64 Python и PHP. MD5 работает одинаково между двумя платформами сценариев (по крайней мере, с использованием .hexdigest () в Python).]

23
задан Charles 19 April 2011 в 17:52
поделиться