
🔐 Welche Art von Hash verwendet WordPress
Das Passwort zu Ihrem Admin-Bereich ist das Letzte, was einen Hacker von der vollständigen Kontrolle über Ihre Website trennt. Ein schwaches Passwort oder ein veralteter Speichermechanismus machen teures Hosting und eine kostenpflichtige Firewall zu bloßer Dekoration.
In über zwanzig Jahren hat sich WordPress von MD5 zu industrietauglichem bcrypt weiterentwickelt. Ab Version 6.8 ist das Passwort-Hashing direkt nach der Installation modern, ohne Plugins oder Workarounds. Doch jeder Website-Betreiber sollte genau verstehen, was mit seinem Passwort nach dem Klick auf „Anmelden" geschieht.
Nachfolgend die gesamte Kette: von der Eingabe eines Passworts im Anmeldeformular bis zum Hash-String in der Datenbank. Mit Code, Filtern und spezifischen Einstellungen für alle, die mehr wollen, als der Kern bereitstellt.
💡 Kurzüberblick:
- WordPress 6.8 und neuer hasht Passwörter mit dem bcrypt-Algorithmus, demselben Standard, den auch Banken und Behördensysteme nutzen
- Alte Hashes (MD5, phpass) werden bei der nächsten Anmeldung des Nutzers automatisch auf bcrypt aktualisiert; die Migration erfolgt nahtlos und erfordert kein manuelles Eingreifen
- Der Filter
wp_hash_password_algorithmerlaubt den Wechsel zu Argon2 mit einer einzigen Codezeile, ganz ohne Plugins - Das Plugin „PHP Native Password Hash" bleibt eine praktikable Option für Versionen unter 6.8 und bietet eine detaillierte Konfiguration der Argon2-Parameter über die
wp-config.php
Was Hashing ist und warum WordPress es benötigt
Hashing ist eine kryptografische Einweg-Transformation. Aus einer Zeichenkette beliebiger Länge entsteht ein „Fingerabdruck" fester Größe. Einen Hash zurück in das ursprüngliche Passwort zu verwandeln, ist mathematisch unmöglich; man kann nur verschiedene Eingaben ausprobieren und die resultierenden Hashes vergleichen.

Anders als bei der Verschlüsselung, bei der Daten mit einem Schlüssel wiederhergestellt werden können, ist ein Hash eine Einbahnstraße. Wenn Sie bei der Anmeldung ein Passwort eingeben, führt WordPress es durch dieselbe Hash-Funktion und vergleicht das Ergebnis mit dem in der Datenbank hinterlegten Wert. Stimmen sie überein, wird der Zugriff gewährt. Andernfalls wird er verweigert.
WordPress speichert Hashes in der Tabelle wp_users im Feld user_pass. Sollte die Datenbank kompromittiert werden (und das ist selbst Giganten passiert: LinkedIn, Yahoo und Tumblr haben Hunderte Millionen Datensätze verloren), erhält ein Angreifer keine lesbaren Passwörter, sondern lange bcrypt-Strings. Das Passwort aus einem solchen String wiederherzustellen, ist unmöglich. Es jedoch durch einen Wörterbuchangriff zu erraten, ist möglich, wenn der Algorithmus schwach oder veraltet ist. Genau deshalb ist die Entwicklung des Hashings in WordPress so bedeutsam.
Wie WordPress Passwörter früher hashtete: MD5 und phpass
Vor Version 2.5 (2008) verwendete WordPress reines MD5. Der Algorithmus verwandelt jedes Passwort in einen 128-Bit-Hash, der aus 32 hexadezimalen Zeichen besteht. Das sieht sicher aus, aber MD5 ist anfällig für Rainbow Tables (vorberechnete Datenbanken mit Hashes für Milliarden gängiger Passwörter). Ein Hacker mit Datenbankzugriff schlägt den Hash einfach in einer solchen Tabelle nach und erhält sofort das ursprüngliche Passwort.
Ab Version 2.5 wechselte WordPress zu phpass, einer portablen Bibliothek auf Basis von bcrypt (Blowfish). Diese fügte dem Passwort ein zufälliges „Salt" hinzu und führte das Ergebnis mehrfach durch die Hash-Funktion (standardmäßig 2^8 = 256 Iterationen). Das Salt machte Rainbow Tables nutzlos: Zwei identische Passwörter für verschiedene Nutzer erzeugten unterschiedliche Hashes. Gleichzeitig wahrte phpass die Abwärtskompatibilität zu MD5; alte Passwörter funktionierten weiterhin und wurden bei der Anmeldung nahtlos in das neue Format überführt.
Dies war viele Jahre lang ausreichend. Doch die Branche entwickelte sich weiter: Moderne Hardware (GPU-Farmen und ASICs) kann Milliarden von Hashes pro Sekunde durchprobieren. Der bcrypt-Algorithmus mit einem konfigurierbaren Kostenfaktor wurde zum Industriestandard. Und ab WordPress 6.8 nutzt der Kern ihn nativ.
WordPress 6.8 und bcrypt: Was sich geändert hat
Die Version WordPress 6.8 „Cecil" (April 2025) brachte den vollständigen Übergang zu bcrypt. Zuvor nutzte der Kern seine eigene PasswordHash-Klasse aus der phpass-Bibliothek; jetzt ruft er die native PHP-Funktion password_hash() mit der Konstante PASSWORD_BCRYPT auf.

Wesentliche Änderungen in der Funktion wp_hash_password():
- bcrypt als Standard. Alle neuen Passwörter werden über
password_hash()mit dem bcrypt-Algorithmus und dem vom PHP-Server festgelegten Kostenfaktor (üblicherweise 10) gehasht. - Automatische Migration alter Passwörter. Wenn sich ein Nutzer anmeldet, prüft WordPress über
password_needs_rehash(), ob der Hash aktualisiert werden muss. Das alte phpass-Format ($P$...) wird nahtlos durch bcrypt ersetzt. - Schutz für lange Passwörter. bcrypt kürzt Passwörter, die länger als 72 Bytes sind, was die Entropie verringert. WordPress 6.8 löst dies durch vorheriges Hashing mit SHA-384 unter Verwendung des Domain-Schlüssels
wp-sha384und Base64-Kodierung. Ein 100 Zeichen langes Passwort behält seine volle Stärke. - Filter für flexible Konfiguration. Neue Hooks wurden eingeführt:
wp_hash_password_algorithm(Auswahl des Algorithmus) undwp_hash_password_options(Parameter: cost, memory_cost, threads).
Der Aufruf von wp_hash_password() im Kern von WordPress 6.8 sieht so aus:
1 function wp_hash_password( $password ) { 2 global $wp_hasher; 3 4 if ( ! empty( $wp_hasher ) ) { 5 return $wp_hasher->HashPassword( trim( $password ) ); 6 } 7 8 if ( strlen( $password ) > 4096 ) { 9 return '*'; 10 } 11 12 $algorithm = apply_filters( 'wp_hash_password_algorithm', PASSWORD_BCRYPT ); 13 $options = apply_filters( 'wp_hash_password_options', array(), $algorithm ); 14 15 if ( PASSWORD_BCRYPT !== $algorithm ) { 16 return password_hash( $password, $algorithm, $options ); 17 } 18 19 $password_to_hash = base64_encode( 20 hash_hmac( 'sha384', trim( $password ), 'wp-sha384', true ) 21 ); 22 23 return '$wp' . password_hash( $password_to_hash, $algorithm, $options ); 24 }
Die Funktion prüft zunächst, ob die Hashing-Logik durch ein externes Plugin überschrieben wurde (die globale Variable $wp_hasher). Anschließend weist sie Passwörter zurück, die länger als 4096 Zeichen sind; solche Anmeldeversuche geben * zurück, was eine Authentifizierung unmöglich macht. Dann folgt der interessante Teil: Der Filter wp_hash_password_algorithm bestimmt den Algorithmus. Ist die Auswahl NICHT bcrypt, wird das Passwort direkt gehasht. Wird bcrypt gewählt, durchläuft das Passwort zuerst SHA-384 mit dem Schlüssel wp-sha384, wird in Base64 kodiert und erst dann an password_hash() übergeben. Das Ergebnis ist ein Hash mit dem Präfix $wp, das „WordPress"-bcrypt von reinem bcrypt unterscheidet. Dies ist nützlich für Datenbank-Audits oder die Integration mit externen Systemen.
So verstärken Sie das Hashing mit Argon2
bcrypt ist eine exzellente Basis. Der nächste Schritt ist Argon2, der Gewinner der Password Hashing Competition von 2015. Argon2 wurde speziell entwickelt, um GPU-Angriffen zu widerstehen: Es ist speicherintensiv, und Grafikkarten sind hier der Flaschenhals.

Option 1: Der Hook wp_hash_password_algorithm (WordPress 6.8+)
Fügen Sie dies in die functions.php Ihres Child-Themes oder über das Plugin Code Snippets ein:
1 add_filter( 'wp_hash_password_algorithm', function() { 2 return PASSWORD_ARGON2ID; 3 });
Innerhalb weniger Sekunden wechselt WordPress zu Argon2ID. Alte Passwörter werden automatisch neu gehasht, wenn sich Nutzer anmelden. Ihr Hosting muss Argon2 in PHP unterstützen; Sie benötigen Version 7.3 oder neuer für Argon2ID. Sie können die Verfügbarkeit durch den Aufruf von password_algos() prüfen.
Zur Feinabstimmung der Parameter nutzen Sie den begleitenden Hook:
1 add_filter( 'wp_hash_password_options', function( $options, $algorithm ) { 2 if ( PASSWORD_ARGON2ID === $algorithm ) { 3 return array( 4 'memory_cost' => 65536, // 64 MB 5 'time_cost' => 4, 6 'threads' => 2, 7 ); 8 } 9 return $options; 10 }, 10, 2 );
Der Parameter memory_cost bestimmt, wie viel Arbeitsspeicher der Algorithmus bei der Berechnung des Hashes verwenden muss; je höher der Wert, desto schwieriger wird GPU-basiertes Brute-Forcing. time_cost legt die Anzahl der Iterationen fest und threads die Anzahl der Threads.
Option 2: Das Plugin PHP Native Password Hash
Für WordPress-Versionen unter 6.8 übernimmt das Plugin PHP Native Password Hash dieselbe Aufgabe. Es ersetzt die gesamte Hash-Logik durch natives password_hash(), unterstützt bcrypt und Argon2 und hat keine Oberfläche; sämtliche Einstellungen werden über Konstanten in der wp-config.php konfiguriert:
1 define( 'WP_PASSWORD_HASH_ALGO', PASSWORD_ARGON2ID ); 2 define( 'WP_PASSWORD_HASH_OPTIONS', [ 3 'memory_cost' => 65536, 4 'time_cost' => 4, 5 'threads' => 2, 6 ] );
Das Plugin wurde seit über zwei Jahren nicht mehr aktualisiert, sein Code ist jedoch schlank und stabil. Mit WordPress 6.8 ist seine Funktionalität im Core enthalten, sodass Sie es deinstallieren und stattdessen native Filter verwenden können.
Hash-Generatoren: was heute funktioniert
Es gibt Situationen, in denen Sie einen Hash manuell erzeugen müssen: wenn Sie ein Passwort direkt über phpMyAdmin in die Datenbank schreiben oder Benutzer aus einem externen System migrieren.

Der in der Ära älterer WordPress-Versionen beliebte Online-Generator von passwordtool.hu ist nicht mehr verfügbar: die Seite hat den Besitzer gewechselt. Funktionierende Alternativen heute:
- WP-CLI: der Befehl
wp user update <id> --user_pass="newpassword"erledigt alles korrekt überwp_hash_password(). Schnell, sicher und garantiert richtig. - Ein PHP-Skript im Wurzelverzeichnis der Site: legen Sie temporär eine Datei mit einem Aufruf von
echo wp_hash_password('password');an und löschen Sie sie sofort nach der Verwendung. - Ein beliebiger Online-bcrypt-Generator: zum Beispiel bcrypt.online. Aber bedenken Sie: WordPress 6.8 fügt das Präfix
$wpund SHA-384-Pre-Hashing hinzu, sodass ein reiner bcrypt-Hash für das direkte Einfügen in die Datenbank nicht funktioniert.
In der Praxis ist WP-CLI die zuverlässigste Option.
Wie Sie ein Passwort wählen, das nicht geknackt wird
Auch bcrypt rettet Sie nicht, wenn das Passwort admin123 lautet. Hacker beginnen ihren Angriff mit Wörterbuch-Brute-Forcing.

Das Tool zxcvbn von Dropbox, das in WordPress zur Passwortbewertung im Admin-Panel integriert ist, weist gängige Muster zurück: Geburtsdaten, 123456 und qwerty, Haustiernamen. Es analysiert Passwörter anhand von Wörterbüchern, Tastaturlayouts und Zeichenersetzungsmustern. Eine Bewertung als „schwach" bedeutet, dass das Passwort in Sekunden erraten werden kann.
Drei praktische Regeln:
- Zufällige Wörter, nicht Zeichensalat. Ein Passwort aus vier oder fünf nicht zusammenhängenden englischen Wörtern mit Trennzeichen (zum Beispiel
correct-horse-battery-staple) ist leichter zu merken alsTr0ub4dor&3und braucht weit länger, um geknackt zu werden. - Länge zählt mehr als Komplexität. Sechzehn zufällige Kleinbuchstaben bieten eine höhere Entropie als 8 Zeichen mit Sonderzeichen. Und bcrypt in WordPress 6.8 bewahrt die Entropie von Passwörtern jeder sinnvollen Länge durch das SHA-384-Pre-Hashing.
- Nutzen Sie einen Passwort-Manager. Das menschliche Gedächtnis ist ein schlechtes Werkzeug, um ein Dutzend eindeutige Passwörter zu verwalten. 1Password ist der kostenpflichtige Goldstandard mit Familientarif, KeePass ist freie Open Source mit lokaler Datenbank, Bitwarden ist der goldene Mittelweg: kostenlos, cloudbasiert und Open Source.

Ein Passwort-Manager generiert, speichert und füllt Passwörter automatisch aus. Sie müssen sich nur ein Master-Passwort merken. Und wenn die Seite Zwei-Faktor-Authentifizierung unterstützt, aktivieren Sie sie unbedingt. Ein Passwort plus ein Einmalcode aus einer App macht den Login praktisch unangreifbar.
Video: wie Passwort-Hashing in WordPress funktioniert
Eine kurze Erklärung des Hashing-Mechanismus, von der Passworteingabe bis zur Speicherung in der WordPress-Datenbank:
⁉️🤔 Häufig gestellte Fragen
Funktionieren mit altem MD5 gehashte Passwörter in WordPress 6.8+ noch?
Ja. Wenn sich ein Benutzer anmeldet, erkennt WordPress das alte Hash-Format, verifiziert das Passwort mit dem vorherigen Algorithmus und stuft den Hash, wenn alles passt, nahtlos auf bcrypt hoch. Es ist nicht nötig, alte Benutzer zu löschen oder Passwort-Zurücksetzungen zu erzwingen.
Wird das PHP Native Password Hash-Plugin unter WordPress 6.8 und neuer noch benötigt?
Nein. Alles, was das Plugin tat (Hashing via
password_hash()und Argon2-Unterstützung), ist jetzt über die nativen Filterwp_hash_password_algorithmundwp_hash_password_optionsverfügbar. Das Plugin bleibt nur für Versionen unter 6.8 relevant.
Kann ich von Argon2 zurück zu bcrypt wechseln?
Technisch ja, indem Sie den Algorithmus im Filter ändern. Aber alte Argon2-Hashes werden dann nicht erkannt und Benutzer müssen ihre Passwörter zurücksetzen. Wenn Sie auf einer Live-Site mit Algorithmen experimentieren, erstellen Sie zuerst ein vollständiges Datenbank-Backup.
Hilft bcrypt, wenn die Datenbank geleakt wird?
bcrypt macht das Erraten von Passwörtern aus geleakten Hashes hunderttausendfach langsamer als MD5. Mit einem Kostenfaktor von 10 benötigt ein Hash auf einer modernen CPU etwa 0,1 Sekunden zur Berechnung; eine Milliarde Versuche würden Jahre dauern. Aber wenn das Passwort
passwordlautet, wird es in der allerersten Iteration eines Wörterbuchangriffs gefunden. Der Algorithmus schützt komplexe Passwörter; schwache kann nichts retten.
Wie überprüfe ich, ob meine Passwörter mit bcrypt gehasht werden?
Prüfen Sie die Tabelle
wp_usersvia phpMyAdmin. Das Felduser_passsollte bei neuen Benutzern (und solchen, die sich nach dem Upgrade auf 6.8 angemeldet haben) mit dem Präfix$wpbeginnen (dem Marker für das neue bcrypt-Format von WordPress). Alte phpass-Hashes sehen aus wie$P$B.... Für eine Massenprüfung führen Sie diese SQL-Abfrage aus:SELECT COUNT(*) FROM wp_users WHERE user_pass NOT LIKE '$wp$%' AND user_pass NOT LIKE '$P$%';. Sie zeigt, wie viele Passwörter gegebenenfalls noch in einem veralteten Format feststecken.
Was Sie jetzt in Sachen WordPress-Hashing tun sollten
Wenn Ihre WordPress-Website auf Version 6.8 oder neuer läuft, sind Sie bereits durch bcrypt geschützt; Sie müssen nichts tun. Der Core stuft alte Hashes automatisch hoch, wenn Benutzer sich anmelden, und die Migration verläuft vollkommen nahtlos.
Wenn Sie Argon2 nutzen möchten, fügen Sie den Filter wp_hash_password_algorithm mit PASSWORD_ARGON2ID in die functions.php ein. Stellen Sie zunächst sicher, dass Ihr Hosting Argon2 unterstützt: Führen Sie var_dump(password_algos()); über ein Testskript aus. Die meisten modernen Hosting-Anbieter bieten Unterstützung.
Für Versionen unter 6.8 installieren Sie das Plugin PHP Native Password Hash; es stellt Ihnen bcrypt oder Argon2 bereit, ohne den Core zu aktualisieren. Planen Sie bei der Gelegenheit gleich ein WordPress-Update ein: Jedes größere Update schließt Dutzende Sicherheitslücken, nicht nur beim Hashing.
Und vor allem: Ändern Sie admin123 in etwas Vernünftiges. Kein Algorithmus schützt Sie vor einem Wörterbuchangriff, wenn Ihr Passwort unter den ersten hundert Einträgen der rockyou.txt-Liste steht.



