Berechnen von MD5-Hashes für große Dateien in Python
Das Hashlib-Modul von Python bietet eine praktische Schnittstelle zum Berechnen kryptografischer Hashes. Bei außergewöhnlich großen Dateien, deren Größe den Systemspeicher überschreitet, kann die direkte Verwendung von Hashlib jedoch problematisch sein.
Lösung: Progressives Hashing
Um dieses Problem zu beheben, verwenden wir progressives Hashing indem die Datei in überschaubaren Blöcken gelesen wird. Dieser Ansatz stellt sicher, dass der gesamte Dateiinhalt gehasht wird, ohne übermäßig viel Speicher zu verbrauchen. Hier ist eine Beispiel-Python-Funktion, die diese Technik implementiert:
<code class="python">import hashlib 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 den MD5-Hash einer großen Datei zu berechnen, können Sie die Funktion wie folgt aufrufen:
<code class="python">with open("filename", "rb") as f: md5 = md5_for_file(f)</code>
Hinweis im Dateimodus
Stellen Sie sicher, dass Sie die Datei im Binärmodus mit „rb“ öffnen, um genaue Ergebnisse zu erhalten. Die Verwendung von „r“ kann zu falschen Berechnungen führen.
Zusätzliche Überlegungen
Der Einfachheit halber wird unten eine verbesserte Version der Funktion vorgestellt:
<code class="python">import hashlib import os def generate_file_md5(rootdir, filename): m = hashlib.md5() with open(os.path.join(rootdir, filename), "rb") as f: buf = f.read() while buf: m.update(buf) buf = f.read() return m.hexdigest()</code>
Es wird empfohlen, die berechneten Hashes mit externen Tools wie Jacksum abzugleichen, um die Genauigkeit zu überprüfen.
Das obige ist der detaillierte Inhalt vonWie kann ich große Dateien in Python ohne übermäßigen Speicherverbrauch hashen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!