Wie kann ich MD5, SHA und andere Hashes aus einer Datei erhalten, aber nur einen Durchlauf? Ich habe 100 MB-Dateien, also würde ich diese 100 MB-Dateien mehrere Male verarbeiten.Wie kann ich mehrere Hashes einer Datei mit nur einem Durchlauf erstellen?
6
A
Antwort
7
Hier ist eine modifizierte @ʞɔıu
's answer mit @Jason S
' suggestion.
from __future__ import with_statement
from hashlib import md5, sha1
filename = 'hash_one-pass.py'
hashes = md5(), sha1()
chunksize = max(4096, max(h.block_size for h in hashes))
with open(filename, 'rb') as f:
while True:
chunk = f.read(chunksize)
if not chunk:
break
for h in hashes:
h.update(chunk)
for h in hashes:
print h.name, h.hexdigest()
15
So etwas vielleicht?
>>> import hashlib
>>> hashes = (hashlib.md5(), hashlib.sha1())
>>> f = open('some_file', 'r')
>>> for line in f:
... for hash in hashes:
... hash.update(line)
...
>>> for hash in hashes:
... print hash.name, hash.hexdigest()
oder Schleife über f.read (1024) oder so ähnlich Blöcken mit fester Länge
3
zu bekommen Ich weiß, Python nicht, aber ich kenne w/Hash-Berechnungen.
Wenn Sie manuell mit dem Lesen von Dateien umgehen, lesen Sie nur einen Block (256 Bytes oder 4096 Bytes oder was auch immer) gleichzeitig und übergeben Sie jeden Datenblock, um den Hash jedes Algorithmus zu aktualisieren. (Sie müssen den Status am Anfang initialisieren und den Status am Ende abschließen.)
Verwandte Themen
- 1. Rendering auf mehrere Texturen mit einem Durchlauf in directx 11
- 2. Wie kann ich mehrere Optionsfeldgruppen auf einem einzelnen Formular erstellen?
- 3. Wie kann ich einen Hash von Hashes in Perl erstellen?
- 4. Wie mehrere Hashes zusammengeführt werden?
- 5. Hashes vs Mehrere Params?
- 6. Wie kann ich mit Cargo mehrere Binärdateien erstellen?
- 7. Erstellen einer .p12-Datei mit einem KeyStore
- 8. Hashes selbe Zeichen mehrere Male
- 9. Erstellen von Hashes für Passwörter
- 10. Wie kann ich nur eine Einladung erstellen?
- 11. PHP Wie kann ich mehrere Sitzungen erstellen?
- 12. Wie kann ich einen Datencontainer nur mit docker-compose.yml erstellen?
- 13. Wie kann ich nur 'interessante' Wörter aus einem Korpus finden?
- 14. Durchlauf durch JSON mit SwiftyJSON
- 15. ChaplinJS + Brunch, kann ich nur eine JS-Datei erstellen?
- 16. Wie kann ich mehrere Tasten mit Kivy erstellen?
- 17. Wie kann ich eine .so-Datei in einem Jar bündeln?
- 18. Kann ich mehrere Konfigurationen eines Projekts innerhalb einer Lösungskonfiguration erstellen?
- 19. Wie kann ich einen Pfeil nur mit CSS erstellen?
- 20. Wie kann ich mehrere Projekte gleichzeitig mit Albacore erstellen?
- 21. Wie kann ich mehrere Dateien von einem NSData-Objekt speichern?
- 22. Wie kann ich mehrere Sockets in einem Perl-Daemon mit großer Speicherauslastung behandeln?
- 23. erstellen Sie mehrere Textdateien aus einer Liste mit Batch-Datei
- 24. Wie kann ich ARC in nur einem Teil einer Datei deaktivieren, nicht die ganze Sache?
- 25. (Rails) Erstellen multidimensionaler Hashes/Arrays aus einem Datensatz ...?
- 26. Wie kann ich mehrere Links mit einem Hotkey öffnen?
- 27. Wie kann ich eine selbstkonsistente JAR-Datei mit Eclipse erstellen?
- 28. Wie installiere ich mehrere Dateien mit einer einzigen Datei-Ressource
- 29. Wie kann ich nur meine PHP-Datei eine Datei herunterladen?
- 30. Mehrere Dateien mit einem Trennzeichen in einer Datei kombinieren
, das wie es funktionieren würde aussieht, aber ich würde Bytes, die mit einer festen Blockgröße anstelle einer pro-Zeile-Basis (einige binäre Dateien dürfen keine Zeilenumbrüche) –
f.readlines() erfordert ~ 100 MB, lesen, aber ein einfaches 'f' funktioniert (ein Dateiobjekt ist ein Iterator über Zeilen in Python) – jfs
' für Zeile in f 'iteriert über * Zeilen * in der Datei. Wenn die Zeilengröße 1 MB beträgt, ist es egal, welche Puffergröße Sie verwenden. len (Linie) wird 2 ** 20 sein. Daher ist der 3. Parameter für das 'open()' in diesem Fall nicht nützlich. – jfs