Я пытаюсь создать контрольную сумму двоичного файла (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 ...).Спасибо!
[посмертно: проблема заключалась в разнице между Python и разновидностями кодировки base64 в PHP.MD5 работает одинаково между двумя платформами сценариев (по крайней мере, с помощью .hexdigest () в Python).]