Python Сравнить локальный и удаленный файл MD5 Hash - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь сравнить локальный и удаленный файл MD5-хеша (тот же файл, который я копирую / вставляю в мой каталог wamp "www"), но я не понимаю, почему "контрольные суммы" не соответствуют ...

Вот код контрольной суммы:

#-*- coding: utf-8 -*-

import hashlib
import requests

def md5Checksum(filePath,url):
    if url==None:
        with open(filePath, 'rb') as fh:
            m = hashlib.md5()
            while True:
                data = fh.read(8192)
                if not data:
                    break
                m.update(data)
            return m.hexdigest()
    else:
        r = requests.get(url, stream=True)
        m = hashlib.md5()
        for line in r.iter_lines():
            m.update(line)
        return m.hexdigest()

print "checksum_local :",md5Checksum("projectg715gb.pak",None)
print "checksum_remote :",md5Checksum(None,"http://testpangya.ddns.net/projectg715gb.pak")

И я удивлен, получив этот вывод:

checksum_local : 9d33806fdebcb91c3d7bfee7cfbe4ad7
checksum_remote : a13aaeb99eb020a0bc8247685c274e7d

Размер "projectg715gb.pak" равен 14,7 МБ

Но если я попытаюсь с текстовым файлом (размер 1Кб):

print "checksum_local :",md5Checksum("toto.txt",None)
print "checksum_remote :",md5Checksum(None,"http://testpangya.ddns.net/toto.txt")

Тогда это сработает oO Я получаю такой вывод:

checksum_local : f71dbe52628a3f83a77ab494817525c6
checksum_remote : f71dbe52628a3f83a77ab494817525c6

Я новичок в сравнении хэша MD5так что будьте добры, пожалуйста ^^ 'Возможно, я сделал какую-то большую ошибку, я не понимаю, почему это не работает с большими файлами, если кто-то может дать мне подсказку, это будет супер приятно!

Однако спасибо за чтение и помощь!

1 Ответ

0 голосов
/ 01 февраля 2019

Итак, благодаря помощникам, вот окончательный код:

#-*- coding: utf-8 -*-

import hashlib
import requests

def md5Checksum(filePath,url):
    m = hashlib.md5()
    if url==None:
        with open(filePath, 'rb') as fh:
            m = hashlib.md5()
            while True:
                data = fh.read(8192)
                if not data:
                    break
                m.update(data)
            return m.hexdigest()
    else:
        r = requests.get(url)
        for data in r.iter_content(8192):
             m.update(data)
        return m.hexdigest()

print "checksum_local :",md5Checksum("projectg715gb.pak",None)
print "checksum_remote :",md5Checksum(None,"http://testpangya.ddns.net/projectg715gb.pak")
...