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

KennungVerfahrenAufbau (Beispiel)Verwendet vonBewertung
$argon2id$Argon2id (PHC-Format)$argon2id$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$wT4lrQx2c5tKl0kz8fRkq3Dz3bQh9e7J1k2vF8c6Y0Elibargon2, PHP, Django, Spring, Keycloakempfohlen
$argon2i$Argon2i$argon2i$v=19$m=65536,t=4,p=1$c2FsdHNhbHRzYWx0$Ys8eTq0YvqLqW5bD5zr3oN1QJvZ7m0b0sQ2fVxkq4uYältere Argon2-Installationenakzeptabel
$argon2d$Argon2d$argon2d$v=19$m=65536,t=3,p=1$c2FsdHNhbHRzYWx0$1lMH5k2s8cYqgWb3QWQ9lq0bYwq9uZ7nT0rQ5yZt6sIselten für Passwörter, eher Kryptowährungenakzeptabel
$y$yescrypt$y$j9T$F5Jx5fExrKuPp53xLKQ..1$X3DX6M94c7o.9agCG9G317fhZg9SqC.5i5rd.RhAtQ7/etc/shadow: Debian ab 11, Ubuntu ab 22.04, Fedora ab 35empfohlen
$gy$gost-yescrypt$gy$j9T$1EEN7yd0.Hp5kkmS0IZ6P/$k4XhXnwN8z5ZzhQ7ebIEgdLJHMfWgg6qUM0gNEKtoK3libxcrypt, russische GOST-Varianteakzeptabel
$7$scrypt (libxcrypt)$7$C6..../....n8ty0wR3bVf2T7BGpZb4b0$Dl8iOJN5nFQd3qtL4V2yGl2pWCpK5k0bH3mCGlJm5m3libxcrypt, FreeBSDempfohlen
$scrypt$scrypt (passlib)$scrypt$ln=17,r=8,p=1$aM15713r3Xsvxbi31lqr1Q$nFNh2CVHVjNldFVKDHDlm4CbdRSCdEBsjjJxD+iCs5EPython passlibempfohlen
$2b$bcrypt$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUWOpenBSD, Python bcrypt, Node bcrypt, viele Frameworksempfohlen
$2y$bcrypt (PHP)$2y$10$4YwLjUkC6VZQkGQZ7Jm0Ae6l6Bv1h0mQ3oVb1GQe6xk9yQnZ3R7nSPHP password_hash() mit PASSWORD_DEFAULT, Laravel, Symfonyempfohlen
$2a$bcrypt (älteres Präfix)$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWySpring Security, ältere Bibliothekenakzeptabel
$2x$bcrypt mit Fehler-Kennzeichen$2x$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWycrypt_blowfish: markiert Hashes aus fehlerhafter Version vor 2011veraltet
$wp$2y$WordPress ab 6.8 (bcrypt)$wp$2y$10$4YwLjUkC6VZQkGQZ7Jm0Ae6l6Bv1h0mQ3oVb1GQe6xk9yQnZ3R7nSWordPress ab Version 6.8, bcrypt über vorgeschaltetes HMAC-SHA384empfohlen
$6$SHA-512-crypt$6$rounds=656000$saltsaltsalt1234$Ix1yLOSXtqHQi5wQe0YXJ6Q7Z5oW8J9b0bR2rLkY0r0lJ4dD9Y9w4pVnI0eB1Qc6l3K3vYk0Hq4n2Zs5dJm8a//etc/shadow: RHEL, ältere Debian- und Ubuntu-Versionenakzeptabel
$5$SHA-256-crypt$5$rounds=535000$saltsaltsalt1234$6nGfP4Wq1M2r0Zt9Yv3Lk8Ej5Hc7Bd2Nx4Ua6Sw0Qo/Linux, Solaris, Java-Bibliothekenakzeptabel
$1$MD5-crypt$1$O3JMY.Tw$AdLnLjQ/5jXF9.MTp3gHv/alte Linux-Systeme, Cisco Typ 5unsicher
$apr1$Apache MD5 (htpasswd)$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/htpasswd -m, ältere .htpasswd-Dateienunsicher
$sha1$SHA1-crypt (NetBSD)$sha1$48000$saltsaltsa$Hc9K1mF4xY2qL7rD0nP3sT6vB8wZNetBSDveraltet
$3$NT-Hash (FreeBSD)$3$$8846f7eaee8fb117ad06bdd830b7586cFreeBSD crypt, kompatibel zu Windows-Anmeldungenunsicher
_BSDi Extended DES_J9..CCCCXBrJUJV154Malte BSD-Systemeunsicher
(13 Zeichen)DES-crypt (traditionell)rEK1ecacw.7.csehr alte Unix-Systeme, nur 8 Zeichen des Passworts zählenunsicher
$pbkdf2-sha256$PBKDF2-SHA256 (passlib)$pbkdf2-sha256$600000$c2FsdHNhbHQ$nP0SXH9gRkqY8o3sZLHsvhkk9MO8dsDeVJaZOxkd0tIPython passlibakzeptabel
$pbkdf2-sha512$PBKDF2-SHA512 (passlib)$pbkdf2-sha512$210000$c2FsdHNhbHQ$Zp3m0Qk6kBf1y8cJ0hWq2r5vT9xL4sN7aE1dG3uY6iO0pR8tW2zX5cV9bN4mK7jH1gF3dS6aQ0wE2rT5yU8iOwPython passlibakzeptabel
pbkdf2_sha256$Django PBKDF2pbkdf2_sha256$870000$c2FsdHNhbHRzYWx0$Q8y0hJ1kD3mN5pR7tV9xZ2bC4eG6iK8lM0nO2qS4uW8=Django (Standard-Hasher)akzeptabel
argon2$argon2id$Django Argon2argon2$argon2id$v=19$m=102400,t=2,p=8$c2FsdHNhbHRzYWx0$Yq7mXw3kR9sT1vB5nD8fH2jL4pZ6cE0gUDjango mit Argon2PasswordHasherempfohlen
bcrypt_sha256$Django bcryptbcrypt_sha256$$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUWDjango mit BCryptSHA256PasswordHasherempfohlen
pbkdf2:sha256:Werkzeug PBKDF2 (Flask)pbkdf2:sha256:600000$saltsaltsalt1234$5f4dcc3b5aa765d61d8327deb882cf99b2f1c4e8a4d3e6f7a8b9c0d1e2f3a4b5Flask/Werkzeug generate_password_hashakzeptabel
scrypt:Werkzeug scrypt (Flask)scrypt:32768:8:1$saltsaltsalt1234$9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8bWerkzeug ab Version 3 (Standard)empfohlen
{SSHA}LDAP Salted SHA-1{SSHA}MTIzNDU2Nzg5MDEyMzQ1Njc4OTBzYWx0OpenLDAP userPasswordveraltet
{SSHA512}LDAP Salted SHA-512{SSHA512}SGFzaEhhc2hIYXNoSGFzaEhhc2hIYXNoSGFzaEhhc2hIYXNoSGFzaEhhc2hIYXNoSGFzaEhhc2hIYXNoSGFzaHNhbHRzYWx0OpenLDAP, 389 Directory Serververaltet
{SHA}LDAP SHA-1 ohne Salt{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=alte LDAP-Verzeichnisse, htpasswd -sunsicher
{CRYPT}LDAP mit crypt-Hash{CRYPT}$y$j9T$F5Jx5fExrKuPp53xLKQ..1$X3DX6M94c7o.9agCG9G317fhZg9SqC.5i5rd.RhAtQ7OpenLDAP; dahinter folgt ein crypt-Format wie $6$ oder $y$akzeptabel
*MySQL mysql_native_password*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19MySQL bis 8.0, MariaDBunsicher
$A$005$MySQL caching_sha2_password$A$005$0pU+sGm[on;Mi0lj1i5hhF0eN8wQ7mL2zB4xK6cD9vT1yR3uE5aS7gH2jK4lM6nMySQL ab 8.0 (Standard)akzeptabel
md5PostgreSQL MD5md5a3556571e93b0d20722ba62be61e8c2dPostgreSQL bis 13 (Standard), md5(Passwort + Benutzername)unsicher
SCRAM-SHA-256$PostgreSQL SCRAMSCRAM-SHA-256$4096:c2FsdHNhbHRzYWx0c2FsdA==$StoredKeyBase64AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=:ServerKeyBase64AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=PostgreSQL ab 14 (Standard)akzeptabel
$P$phpass (WordPress bis 6.7)$P$B7JbWJ9o0pD4L0pQ7m2c8ZkD4wE1sF0WordPress bis 6.7, viele PHP-Anwendungenveraltet
$H$phpass (phpBB3)$H$9Ny2jLqk1Gq9WXyF0QeL0bq5kF4sR7.phpBB3veraltet
$S$Drupal 7 (SHA-512)$S$DQx2qL0bX4wYp6v8zC1eF3hJ5kM7nP9rT2uW4yA6cE8gI0kO2qS4Drupal 7veraltet
$8$Cisco Typ 8 (PBKDF2-SHA256)$8$TnGX/fE4KGHOVU$pEhnEvxrvaynpi8j4f.EMHr6M.FzU8xnZnBr/tJdFWkCisco IOS: algorithm-type sha256akzeptabel
$9$Cisco Typ 9 (scrypt)$9$nhEmQVczB7dqsO$X.HsgL6x1il0RxkOSSvyQYwucySCt7qFm4v7pqCxkKMCisco IOS: algorithm-type scryptempfohlen
AQAAAAASP.NET Core Identity V3AQAAAAIAAYagAAAAEAABAgMEBQYHCAkKCwwNDg8DChEYHyYtNDtCSVBXXmVsc3qBiI+WnaSrsrnAx87V3A==ASP.NET Core Identity (PBKDF2, Base64)akzeptabel
(32 Hex)MD5, NTLM oder LM ohne Salt5f4dcc3b5aa765d61d8327deb882cf99alte Datenbanken, Windows-Anmeldedaten (NTLM)unsicher
(40 Hex)SHA-1 ohne Salt5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8alte Datenbankenunsicher
(64 Hex)SHA-256 ohne Salt5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8selbstgebaute Anmeldungenunsicher

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

  1. Einen Hash in das Feld „Hash zerlegen“ einfügen, etwa eine Zeile aus /etc/shadow oder aus einer Datenbank.
  2. Die Zerlegung lesen: Format, Parameter wie Kosten oder Runden, Salt und eigentlicher Hashwert.
  3. Die Bewertung der Parameter mit den Empfehlungen vergleichen.
  4. 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.
Fragen

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.

Weitere Werkzeuge

Das könnte auch helfen

Alle 558 Werkzeuge