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:
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()
Um den MD5-Hash einer großen Datei zu berechnen, können Sie die Funktion wie folgt aufrufen:
with open("filename", "rb") as f:
md5 = md5_for_file(f)
Hinweis zum 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:
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()
Es wird empfohlen, die berechneten Hashes mit externen Tools wie Jacksum zu vergleichen, um die Genauigkeit zu überprüfen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3