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.