Python Hashlib Modul
Das hashlib-Modul stellt sichere Hashfunktionen wie SHA-256 und MD5 bereit.
import hashlib
Hashfunktionen verwandeln Daten in einen Digest fester Länge. Eine kleine Änderung der Eingabe erzeugt einen sehr anderen Digest.
Einen Hash erstellen
In der Regel wählst du zuerst einen Algorithmus aus und übergibst Bytes.
import hashlib
digest = hashlib.sha256(b'hello world')
print(digest.hexdigest())
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
Zeichenketten müssen zuerst in Bytes codiert werden:
import hashlib
message = 'hello world'
digest = hashlib.sha256(message.encode('utf-8')).hexdigest()
print(digest)
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
Inkrementell aktualisieren
Hashes können in Blöcken aktualisiert werden.
hasher = hashlib.sha256()
hasher.update(b'hello ')
hasher.update(b'world')
print(hasher.hexdigest())
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
Algorithmen vergleichen
Verschiedene Algorithmen erzeugen unterschiedlich große Digests.
print(hashlib.md5(b'abc').hexdigest())
print(hashlib.sha1(b'abc').hexdigest())
print(hashlib.sha256(b'abc').hexdigest())
900150983cd24fb0d6963f7d28e17f72
a9993e364706816aba3e25717850c26c9cd0d89d
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
Eine Datei hashen
Lies Dateien blockweise, damit große Dateien nicht auf einmal in den Speicher geladen werden müssen.
import hashlib
from pathlib import Path
path = Path('example.txt')
path.write_text('hello world')
hasher = hashlib.sha256()
with path.open('rb') as file:
for chunk in iter(lambda: file.read(8192), b''):
hasher.update(chunk)
print(hasher.hexdigest())
path.unlink()
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
WARNING
Für neuen Code solltest du moderne Algorithmen wie SHA-256 oder SHA-512 bevorzugen. MD5 und SHA-1 sind weiterhin für Prüfsummen nützlich, aber nicht für sicherheitskritische Einsätze geeignet.