Heim  >  Artikel  >  Backend-Entwicklung  >  Wie berechnet man den MD5-Hash großer Dateien in Python effizient?

Wie berechnet man den MD5-Hash großer Dateien in Python effizient?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-20 11:29:30194Durchsuche

How to Calculate MD5 Hash of Large Files in Python Efficiently?

Berechnen des MD5-Hashs großer Dateien in Python

Bei der Arbeit mit extrem großen Dateien werden traditionelle Methoden zur Berechnung von MD5-Hashes mithilfe der Hashlib-Bibliothek verwendet unpraktisch, da sie das Laden der gesamten Datei in den Speicher erfordern. Dieser Ansatz kann die Systemressourcen erschöpfen, was zu Fehlern und Verlangsamungen führt.

Lösung: Chunked Hashing

Um dieses Problem zu beheben, kann zur Berechnung eine Technik namens Chunked Hashing eingesetzt werden MD5-Hash inkrementell, ohne die gesamte Datei in den Speicher zu laden. Dies beinhaltet:

  1. Aufteilen der Datei in kleinere Blöcke mit überschaubarer Größe (z. B. 1 MB).
  2. Berechnen des MD5-Hashs jedes Blocks mit hashlib.md5().
  3. Verkettung der Hash-Blöcke, um den endgültigen MD5-Hash zu erhalten.

Code-Implementierung:

Die folgende Python-Funktion md5_for_file() implementiert Chunked-Hashing:

<code class="python">def md5_for_file(f, block_size=2**20):
    md5 = hashlib.md5()
    while True:
        data = f.read(block_size)
        if not data:
            break
        md5.update(data)
    return md5.digest()</code>

Um diese Funktion zu verwenden, stellen Sie sicher, dass Sie die Datei im Binärmodus (rb) öffnen.

Vollständige Methode:

Der Einfachheit halber Hier ist eine vollständige Methode „generate_file_md5()“, die Chunked-Hashing mit dem Öffnen von Dateien in einem Schritt kombiniert:

<code class="python">def generate_file_md5(rootdir, filename, blocksize=2**20):
    m = hashlib.md5()
    with open(os.path.join(rootdir, filename), "rb") as f:
        while True:
            buf = f.read(blocksize)
            if not buf:
                break
            m.update(buf)
    return m.hexdigest()</code>

Diese Methode gibt den hexadezimal codierten MD5-Hash der angegebenen Datei als Zeichenfolge zurück. Sie können die Ergebnisse zum Vergleich mit externen Tools wie Jacksum überprüfen.

Das obige ist der detaillierte Inhalt vonWie berechnet man den MD5-Hash großer Dateien in Python effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn