Получить MD5 хеш больших файлов в Python - PullRequest
176 голосов
/ 15 июля 2009

Я использовал hashlib (который заменяет md5 в Python 2.6 / 3.0), и он работал нормально, если я открыл файл и поместил его содержимое в функцию hashlib.md5().

Проблема связана с очень большими файлами, размер которых может превышать размер ОЗУ.

Как получить MD5-хеш файла без загрузки всего файла в память?

Ответы [ 13 ]

0 голосов
/ 02 августа 2016

Реализация принятого ответа для Джанго:

import hashlib
from django.db import models


class MyModel(models.Model):
    file = models.FileField()  # any field based on django.core.files.File

    def get_hash(self):
        hash = hashlib.md5()
        for chunk in self.file.chunks(chunk_size=8192):
            hash.update(chunk)
        return hash.hexdigest()
0 голосов
/ 18 июля 2016
import hashlib,re
opened = open('/home/parrot/pass.txt','r')
opened = open.readlines()
for i in opened:
    strip1 = i.strip('\n')
    hash_object = hashlib.md5(strip1.encode())
    hash2 = hash_object.hexdigest()
    print hash2
0 голосов
/ 04 апреля 2015

Я не уверен, что здесь не так уж много шума. Недавно у меня были проблемы с md5 и файлами, хранящимися в виде BLOB-объектов на MySQL, поэтому я экспериментировал с файлами различных размеров и простым подходом Python, а именно:

FileHash=hashlib.md5(FileData).hexdigest()

Я не обнаружил заметной разницы в производительности с диапазоном размеров файлов от 2 КБ до 20 МБ и, следовательно, не нужно «разбивать» хэширование. В любом случае, если Linux должен перейти на диск, он, вероятно, сделает это по крайней мере так же, как способность обычного программиста удержать его от этого. Как оказалось, проблема не имела ничего общего с md5. Если вы используете MySQL, не забудьте, что функции md5 () и sha1 () уже есть.

...