Wenn du schon einmal ein Programm heruntergeladen hast und neben dem Link eine Zeichenkette wie e3b0c44298fc1c149afbf4c8996fb924… stand, war das ein Hash. Hashes sind überall: in Git, in API-Signaturen, in Cache-Schlüsseln, bei Passwörtern … Aber nicht jeder eignet sich für dieselbe Aufgabe – und der falsche kann eine Sicherheitslücke öffnen.
Was eine Hashfunktion ist
Eine Hashfunktion nimmt einen Text oder eine Datei beliebiger Größe und liefert einen Fingerabdruck fester Länge. Sie hat drei zentrale Eigenschaften:
- Deterministisch: Dieselbe Eingabe ergibt immer denselben Hash.
- Lawineneffekt: Ändert sich ein einziges Zeichen, ändert sich der Hash komplett.
- Einweg: Aus dem Hash lässt sich die Eingabe nicht rekonstruieren.
Der SHA-256 von hallo und von Hallo haben zum Beispiel nichts gemeinsam, obwohl sich nur ein Großbuchstabe unterscheidet. Probier es im Hash-Generator aus: Er berechnet MD5, SHA-1 und SHA-256 gleichzeitig – direkt in deinem Browser.
Die drei Funktionen im Vergleich
| MD5 | SHA-1 | SHA-256 | |
|---|---|---|---|
| Länge | 128 Bit (32 Hex-Zeichen) | 160 Bit (40 Hex) | 256 Bit (64 Hex) |
| Jahr | 1992 | 1995 | 2001 |
| Praktische Kollisionen | Ja, seit 2004 | Ja, seit 2017 | Keine bekannt |
| Heute sicher? | Nein | Nein | Ja |
Eine Kollision bedeutet, zwei verschiedene Eingaben mit demselben Hash zu finden. Bei MD5 lassen sie sich auf einem normalen Rechner in Sekunden erzeugen; für SHA-1 veröffentlichten Google und das CWI 2017 die erste praktische Kollision (der „SHAttered“-Angriff): zwei unterschiedliche PDFs mit demselben Hash. Für SHA-256 ist keine bekannt.
Wofür die drei heute taugen
MD5: nur gegen Zufälle, nie gegen Angreifer
MD5 ist weiterhin nützlich, um zu prüfen, dass eine Datei nicht versehentlich beschädigt wurde (ein abgebrochener Download, eine defekte Festplatte), oder um Cache-Schlüssel zu bilden und Daten zu deduplizieren. Er ist schnell und überall verfügbar. Was du nicht tun solltest: dich auf MD5 verlassen, wenn jemand die Datei absichtlich manipulieren könnte. Ein Angreifer kann eine andere Datei mit demselben Hash erzeugen.
SHA-1: auf dem Rückzug
Git hat jahrelang SHA-1 zur Identifikation von Commits genutzt und migriert auf SHA-256. TLS-Zertifikate mit SHA-1 werden schon lange nicht mehr akzeptiert. Triffst du ihn in einem Altsystem an, plane die Migration; für Neues wähle ihn nicht.
SHA-256: die Standardwahl
Er ist heute der Standard, um Downloads zu prüfen, Daten zu signieren, Zertifikats-Fingerabdrücke zu bilden oder Inhalte eindeutig zu identifizieren. Wenn du „einen Hash“ brauchst und nicht weißt, welchen: Nimm SHA-256.
Der schlimmste Fehler: Passwörter damit hashen
Weder MD5 noch SHA-1 noch SHA-256 eignen sich zum Speichern von Passwörtern. Das Problem ist nicht, dass man sie „entschlüsseln“ könnte, sondern dass sie zu schnell sind: Eine aktuelle Grafikkarte berechnet Milliarden Hashes pro Sekunde, gängige Passwörter gegen eine gestohlene Datenbank zu testen dauert also nur Minuten. Ohne „Salt“ haben zudem zwei Nutzer mit demselben Passwort denselben Hash, und es gibt vorberechnete Tabellen (Rainbow Tables) mit Millionen Hashes gängiger Passwörter.
Für Passwörter nutzt man absichtlich langsame Funktionen mit Salt:
- Argon2id (die aktuelle Empfehlung von OWASP)
- bcrypt
- scrypt
- PBKDF2 mit vielen Iterationen, wenn du FIPS-konform sein musst
Und die beste Verteidigung beginnt beim Passwort selbst: Ein langes, zufälliges – wie die des Passwort-Generators – hält selbst dann stand, wenn der Hash geleakt wird.
Hashing ist keine Verschlüsselung (und kein Base64)
Drei Begriffe, die oft verwechselt werden:
- Hash: Einweg. Es gibt keinen Weg zurück.
- Verschlüsselung: in beide Richtungen, mit Schlüssel. Wer den Schlüssel hat, bekommt das Original zurück.
- Kodierung (Base64): in beide Richtungen, ohne Schlüssel. Jeder kann sie dekodieren; nur das Format ändert sich. Das siehst du im Base64-Encoder.
Willst du prüfen, ob eine Nachricht wirklich vom angegebenen Absender stammt (etwa ein Webhook), reicht ein einfacher Hash nicht: Du brauchst einen HMAC, der den Hash mit einem geheimen Schlüssel kombiniert. Der HMAC-Generator berechnet HMAC-SHA256-Signaturen, um solche Integrationen zu prüfen.
Kurz zusammengefasst
- Prüfen, ob ein Download beschädigt ist? SHA-256 (oder MD5, wenn der Anbieter nur den veröffentlicht).
- Interner Cache-Schlüssel oder Deduplizierung? MD5 oder SHA-256, beides geht.
- Nachrichten zwischen Systemen signieren oder prüfen? HMAC-SHA256.
- Passwörter speichern? Argon2id oder bcrypt. Niemals reines MD5, SHA-1 oder SHA-256.

