Passwort-Hash-Formate erkennen und zerlegen
Passwort-Hash-Formate auf einen Blick: Fügen Sie einen Hash aus /etc/shadow, einer Datenbank oder einem Framework ein und sehen Sie Verfahren, Parameter, Salt und eine Bewertung.
Nachschlagewerk der Formate
| Kennung | Verfahren | Aufbau (Beispiel) | Verwendet von | Bewertung | |
|---|---|---|---|---|---|
| $argon2id$ | Argon2id (PHC-Format) | $argon2id$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$wT4lrQx2c5tKl0kz8fRkq3Dz3bQh9e7J1k2vF8c6Y0E | libargon2, PHP, Django, Spring, Keycloak | empfohlen | |
| $argon2i$ | Argon2i | $argon2i$v=19$m=65536,t=4,p=1$c2FsdHNhbHRzYWx0$Ys8eTq0YvqLqW5bD5zr3oN1QJvZ7m0b0sQ2fVxkq4uY | ältere Argon2-Installationen | akzeptabel | |
| $argon2d$ | Argon2d | $argon2d$v=19$m=65536,t=3,p=1$c2FsdHNhbHRzYWx0$1lMH5k2s8cYqgWb3QWQ9lq0bYwq9uZ7nT0rQ5yZt6sI | selten für Passwörter, eher Kryptowährungen | akzeptabel | |
| $y$ | yescrypt | $y$j9T$F5Jx5fExrKuPp53xLKQ..1$X3DX6M94c7o.9agCG9G317fhZg9SqC.5i5rd.RhAtQ7 | /etc/shadow: Debian ab 11, Ubuntu ab 22.04, Fedora ab 35 | empfohlen | |
| $gy$ | gost-yescrypt | $gy$j9T$1EEN7yd0.Hp5kkmS0IZ6P/$k4XhXnwN8z5ZzhQ7ebIEgdLJHMfWgg6qUM0gNEKtoK3 | libxcrypt, russische GOST-Variante | akzeptabel | |
| $7$ | scrypt (libxcrypt) | $7$C6..../....n8ty0wR3bVf2T7BGpZb4b0$Dl8iOJN5nFQd3qtL4V2yGl2pWCpK5k0bH3mCGlJm5m3 | libxcrypt, FreeBSD | empfohlen | |
| $scrypt$ | scrypt (passlib) | $scrypt$ln=17,r=8,p=1$aM15713r3Xsvxbi31lqr1Q$nFNh2CVHVjNldFVKDHDlm4CbdRSCdEBsjjJxD+iCs5E | Python passlib | empfohlen | |
| $2b$ | bcrypt | $2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW | OpenBSD, Python bcrypt, Node bcrypt, viele Frameworks | empfohlen | |
| $2y$ | bcrypt (PHP) | $2y$10$4YwLjUkC6VZQkGQZ7Jm0Ae6l6Bv1h0mQ3oVb1GQe6xk9yQnZ3R7nS | PHP password_hash() mit PASSWORD_DEFAULT, Laravel, Symfony | empfohlen | |
| $2a$ | bcrypt (älteres Präfix) | $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy | Spring Security, ältere Bibliotheken | akzeptabel | |
| $2x$ | bcrypt mit Fehler-Kennzeichen | $2x$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy | crypt_blowfish: markiert Hashes aus fehlerhafter Version vor 2011 | veraltet | |
| $wp$2y$ | WordPress ab 6.8 (bcrypt) | $wp$2y$10$4YwLjUkC6VZQkGQZ7Jm0Ae6l6Bv1h0mQ3oVb1GQe6xk9yQnZ3R7nS | WordPress ab Version 6.8, bcrypt über vorgeschaltetes HMAC-SHA384 | empfohlen | |
| $6$ | SHA-512-crypt | $6$rounds=656000$saltsaltsalt1234$Ix1yLOSXtqHQi5wQe0YXJ6Q7Z5oW8J9b0bR2rLkY0r0lJ4dD9Y9w4pVnI0eB1Qc6l3K3vYk0Hq4n2Zs5dJm8a/ | /etc/shadow: RHEL, ältere Debian- und Ubuntu-Versionen | akzeptabel | |
| $5$ | SHA-256-crypt | $5$rounds=535000$saltsaltsalt1234$6nGfP4Wq1M2r0Zt9Yv3Lk8Ej5Hc7Bd2Nx4Ua6Sw0Qo/ | Linux, Solaris, Java-Bibliotheken | akzeptabel | |
| $1$ | MD5-crypt | $1$O3JMY.Tw$AdLnLjQ/5jXF9.MTp3gHv/ | alte Linux-Systeme, Cisco Typ 5 | unsicher | |
| $apr1$ | Apache MD5 (htpasswd) | $apr1$r31.....$HqJZimcKQFAMYayBlzkrA/ | htpasswd -m, ältere .htpasswd-Dateien | unsicher | |
| $sha1$ | SHA1-crypt (NetBSD) | $sha1$48000$saltsaltsa$Hc9K1mF4xY2qL7rD0nP3sT6vB8wZ | NetBSD | veraltet | |
| $3$ | NT-Hash (FreeBSD) | $3$$8846f7eaee8fb117ad06bdd830b7586c | FreeBSD crypt, kompatibel zu Windows-Anmeldungen | unsicher | |
| _ | BSDi Extended DES | _J9..CCCCXBrJUJV154M | alte BSD-Systeme | unsicher | |
| (13 Zeichen) | DES-crypt (traditionell) | rEK1ecacw.7.c | sehr alte Unix-Systeme, nur 8 Zeichen des Passworts zählen | unsicher | |
| $pbkdf2-sha256$ | PBKDF2-SHA256 (passlib) | $pbkdf2-sha256$600000$c2FsdHNhbHQ$nP0SXH9gRkqY8o3sZLHsvhkk9MO8dsDeVJaZOxkd0tI | Python passlib | akzeptabel | |
| $pbkdf2-sha512$ | PBKDF2-SHA512 (passlib) | $pbkdf2-sha512$210000$c2FsdHNhbHQ$Zp3m0Qk6kBf1y8cJ0hWq2r5vT9xL4sN7aE1dG3uY6iO0pR8tW2zX5cV9bN4mK7jH1gF3dS6aQ0wE2rT5yU8iOw | Python passlib | akzeptabel | |
| pbkdf2_sha256$ | Django PBKDF2 | pbkdf2_sha256$870000$c2FsdHNhbHRzYWx0$Q8y0hJ1kD3mN5pR7tV9xZ2bC4eG6iK8lM0nO2qS4uW8= | Django (Standard-Hasher) | akzeptabel | |
| argon2$argon2id$ | Django Argon2 | argon2$argon2id$v=19$m=102400,t=2,p=8$c2FsdHNhbHRzYWx0$Yq7mXw3kR9sT1vB5nD8fH2jL4pZ6cE0gU | Django mit Argon2PasswordHasher | empfohlen | |
| bcrypt_sha256$ | Django bcrypt | bcrypt_sha256$$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW | Django mit BCryptSHA256PasswordHasher | empfohlen | |
| pbkdf2:sha256: | Werkzeug PBKDF2 (Flask) | pbkdf2:sha256:600000$saltsaltsalt1234$5f4dcc3b5aa765d61d8327deb882cf99b2f1c4e8a4d3e6f7a8b9c0d1e2f3a4b5 | Flask/Werkzeug generate_password_hash | akzeptabel | |
| scrypt: | Werkzeug scrypt (Flask) | scrypt:32768:8:1$saltsaltsalt1234$9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b | Werkzeug ab Version 3 (Standard) | empfohlen | |
| {SSHA} | LDAP Salted SHA-1 | {SSHA}MTIzNDU2Nzg5MDEyMzQ1Njc4OTBzYWx0 | OpenLDAP userPassword | veraltet | |
| {SSHA512} | LDAP Salted SHA-512 | {SSHA512}SGFzaEhhc2hIYXNoSGFzaEhhc2hIYXNoSGFzaEhhc2hIYXNoSGFzaEhhc2hIYXNoSGFzaEhhc2hIYXNoSGFzaHNhbHRzYWx0 | OpenLDAP, 389 Directory Server | veraltet | |
| {SHA} | LDAP SHA-1 ohne Salt | {SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g= | alte LDAP-Verzeichnisse, htpasswd -s | unsicher | |
| {CRYPT} | LDAP mit crypt-Hash | {CRYPT}$y$j9T$F5Jx5fExrKuPp53xLKQ..1$X3DX6M94c7o.9agCG9G317fhZg9SqC.5i5rd.RhAtQ7 | OpenLDAP; dahinter folgt ein crypt-Format wie $6$ oder $y$ | akzeptabel | |
| * | MySQL mysql_native_password | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | MySQL bis 8.0, MariaDB | unsicher | |
| $A$005$ | MySQL caching_sha2_password | $A$005$0pU+sGm[on;Mi0lj1i5hhF0eN8wQ7mL2zB4xK6cD9vT1yR3uE5aS7gH2jK4lM6n | MySQL ab 8.0 (Standard) | akzeptabel | |
| md5 | PostgreSQL MD5 | md5a3556571e93b0d20722ba62be61e8c2d | PostgreSQL bis 13 (Standard), md5(Passwort + Benutzername) | unsicher | |
| SCRAM-SHA-256$ | PostgreSQL SCRAM | SCRAM-SHA-256$4096:c2FsdHNhbHRzYWx0c2FsdA==$StoredKeyBase64AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=:ServerKeyBase64AAAAAAAAAAAAAAAAAAAAAAAAAAAAA= | PostgreSQL ab 14 (Standard) | akzeptabel | |
| $P$ | phpass (WordPress bis 6.7) | $P$B7JbWJ9o0pD4L0pQ7m2c8ZkD4wE1sF0 | WordPress bis 6.7, viele PHP-Anwendungen | veraltet | |
| $H$ | phpass (phpBB3) | $H$9Ny2jLqk1Gq9WXyF0QeL0bq5kF4sR7. | phpBB3 | veraltet | |
| $S$ | Drupal 7 (SHA-512) | $S$DQx2qL0bX4wYp6v8zC1eF3hJ5kM7nP9rT2uW4yA6cE8gI0kO2qS4 | Drupal 7 | veraltet | |
| $8$ | Cisco Typ 8 (PBKDF2-SHA256) | $8$TnGX/fE4KGHOVU$pEhnEvxrvaynpi8j4f.EMHr6M.FzU8xnZnBr/tJdFWk | Cisco IOS: algorithm-type sha256 | akzeptabel | |
| $9$ | Cisco Typ 9 (scrypt) | $9$nhEmQVczB7dqsO$X.HsgL6x1il0RxkOSSvyQYwucySCt7qFm4v7pqCxkKM | Cisco IOS: algorithm-type scrypt | empfohlen | |
| AQAAAA | ASP.NET Core Identity V3 | AQAAAAIAAYagAAAAEAABAgMEBQYHCAkKCwwNDg8DChEYHyYtNDtCSVBXXmVsc3qBiI+WnaSrsrnAx87V3A== | ASP.NET Core Identity (PBKDF2, Base64) | akzeptabel | |
| (32 Hex) | MD5, NTLM oder LM ohne Salt | 5f4dcc3b5aa765d61d8327deb882cf99 | alte Datenbanken, Windows-Anmeldedaten (NTLM) | unsicher | |
| (40 Hex) | SHA-1 ohne Salt | 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 | alte Datenbanken | unsicher | |
| (64 Hex) | SHA-256 ohne Salt | 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 | selbstgebaute Anmeldungen | unsicher |
Die Beispiele zeigen den Aufbau; Salt- und Hashwerte sind teils gekürzt oder ausgedacht und gehören zu keinem echten Konto.
Alles läuft in Ihrem Browser. Eingaben verlassen Ihr Gerät nicht.
Modular Crypt Format, PHC-Format und Framework-Hashes
Passwort-Hash-Formate verraten viel über ein System: Das Präfix nennt das Verfahren, danach folgen Parameter, Salt und der eigentliche Hash. Unix-Systeme nutzen das Modular Crypt Format mit Kennungen wie $1$ (MD5-crypt), $5$ (SHA-256-crypt), $6$ (SHA-512-crypt), $2b$ (bcrypt) oder $y$ (yescrypt); die Werte stehen im zweiten Feld von /etc/shadow. Neuere Verfahren wie Argon2 verwenden das PHC-Format, etwa $argon2id$v=19$m=65536,t=3,p=4$Salt$Hash, in dem Speicherbedarf, Durchläufe und Parallelität direkt lesbar sind. Frameworks wie Django, Werkzeug oder ASP.NET haben eigene Schreibweisen.
Das Werkzeug zerlegt einen eingefügten Hash in seine Bestandteile und bewertet die Parameter nach den Empfehlungen des OWASP Password Storage Cheat Sheet: Argon2id mit mindestens 19 MiB Speicher und 2 Durchläufen, scrypt mit N=2^17, bcrypt mit Kostenfaktor 10 oder höher, PBKDF2-HMAC-SHA256 mit 600.000 Iterationen. SHA-512-crypt mit 5.000 Standardrunden ist schneller zu knacken als moderne speicherharte Verfahren, gilt aber noch als akzeptabel. MD5-crypt, ungesalzene Hashes, LDAP-SHA und mysql_native_password sind dagegen veraltet bis unsicher.
Grenzen: Das Werkzeug erkennt Formate an ihrem Aufbau und prüft kein Passwort; dafür gibt es den Bcrypt-Generator und den PBKDF2-Generator. Hashes ohne Präfix wie 32 Hex-Zeichen sind mehrdeutig (MD5, NTLM, LM); eine Liste möglicher Typen für solche Fälle liefert Hash-Typ erkennen. Fügen Sie keine echten Hashes produktiver Konten ein, wenn Ihre Richtlinien das verbieten, auch wenn hier nichts übertragen wird.
Anleitung: Passwort-Hash-Formate in 4 Schritten
- Einen Hash in das Feld „Hash zerlegen“ einfügen, etwa eine Zeile aus
/etc/shadowoder aus einer Datenbank. - Die Zerlegung lesen: Format, Parameter wie Kosten oder Runden, Salt und eigentlicher Hashwert.
- Die Bewertung der Parameter mit den Empfehlungen vergleichen.
- Im Nachschlagewerk darunter per Suche oder Filter weitere Formate ansehen und Beispiele kopieren.
Typische Anwendungsfälle
- Bei einer Migration herausfinden, mit welchem Verfahren eine alte Benutzerdatenbank gehasht wurde.
- Prüfen, ob ein Linux-System noch SHA-512-crypt oder schon yescrypt verwendet.
- Die Kostenparameter von bcrypt oder Argon2 in einer Anwendung mit Empfehlungen abgleichen.
- In Schulungen zeigen, wie Salt und Parameter im Hash selbst gespeichert werden.
Häufige Fragen
Was bedeutet $6$ in /etc/shadow?
Das Passwort ist mit SHA-512-crypt gehasht. Zwischen dem zweiten und dritten Dollarzeichen steht das Salt, optional davor rounds=N, danach der 86 Zeichen lange Hash. Neuere Distributionen nutzen stattdessen $y$ für yescrypt.
Was ist der Unterschied zwischen $2a$, $2b$ und $2y$?
Alle drei sind bcrypt. $2a$ ist das ursprüngliche Präfix, $2b$ kennzeichnet seit 2014 die korrigierte OpenBSD-Version (Fehler bei sehr langen Passwörtern), $2y$ stammt aus PHPs crypt_blowfish und ist gleichwertig zu $2b$.
Welches Format sollte ich für neue Anwendungen wählen?
Argon2id ist die erste Wahl, bcrypt mit Kostenfaktor ab 10 eine gute Alternative, scrypt ebenfalls. PBKDF2 nur, wenn FIPS-Vorgaben es verlangen, dann mit hohen Iterationszahlen.
Was ist das PHC-Format?
Eine Schreibweise aus dem Password Hashing Competition-Projekt: $Kennung$v=Version$Parameter$Salt$Hash, Salt und Hash in Base64 ohne Füllzeichen. Argon2 und viele neuere Bibliotheken nutzen es.
Woran erkenne ich, ob ein Passwort ohne Salt gespeichert wurde?
Formate ohne Salt bestehen meist nur aus einer festen Anzahl Hex-Zeichen, etwa 32 bei MD5 oder NTLM und 40 bei SHA-1. Gleiche Passwörter ergeben dann gleiche Hashes. Formate mit $-Präfix speichern dagegen ein eigenes Salt im Hash.
Kann ich bestehende Hashes auf ein neues Verfahren umstellen, ohne Passwörter zu kennen?
Ja, auf zwei Wegen: beim nächsten erfolgreichen Login neu hashen oder den alten Hash als Eingabe des neuen Verfahrens verwenden (Hash-Verkettung) und später beim Login umstellen. Ein direktes Umrechnen ohne Passwort ist nicht möglich.
Das könnte auch helfen
Hash-Generator
MD5, SHA-1, SHA-256, SHA-384 und SHA-512 für Text oder Datei berechnen und vergleichen.
ÖffnenHMAC-Generator
HMAC mit SHA-256, SHA-512, SHA-1 oder MD5 berechnen und Webhook-Signaturen prüfen.
ÖffnenPasswort-Generator
Sichere Zufallspasswörter mit wählbarer Länge und Zeichengruppen, inklusive Entropie in Bit.
ÖffnenPasswort-Stärke prüfen
Passwort testen: Entropie, typische Muster, häufige Passwörter und grobe Knackzeit.
ÖffnenPassphrase-Generator
Merkbare Passphrasen aus einer deutschen Wortliste mit über 2.000 Wörtern, nach Diceware-Art.
ÖffnenToken-Generator
Zufalls-Token als Hex, Base64URL oder alphanumerisch erzeugen, etwa für API-Keys und Secrets.
Öffnen