
🔐 Hva slags hash bruker WordPress
Passordet til administrasjonspanelet ditt er det siste som står mellom en hacker og full kontroll over nettstedet ditt. Et svakt passord eller en utdatert lagringsmekanisme gjør dyr hosting og en betalt brannmur til ren pynt.
Over tjue år har WordPress utviklet seg fra MD5 til bcrypt på industrinivå. Fra og med versjon 6.8 ble passordhashing moderne rett ut av esken, uten utvidelser eller omveier. Men enhver nettstedseier bør forstå nøyaktig hva som skjer med passordet deres etter å ha klikket «Logg inn».
Nedenfor finner du hele kjeden: fra å skrive inn et passord i påloggingsskjemaet til hash-strengen i databasen. Med kode, filtre og spesifikke innstillinger for dem som ønsker mer enn det kjernen tilbyr.
💡 Rask oversikt:
- WordPress 6.8 og nyere hasher passord ved hjelp av bcrypt-algoritmen, den samme standarden som brukes av banker og offentlige systemer
- Gamle hasher (MD5, phpass) oppgraderes automatisk til bcrypt ved brukerens neste pålogging; migreringen er sømløs og krever ingen manuell handling
- Filteret
wp_hash_password_algorithmlar deg bytte til Argon2 med én enkelt kodelinje, uten behov for utvidelser - Utvidelsen PHP Native Password Hash er fortsatt et levedyktig alternativ for versjoner under 6.8 og gir finjustert konfigurasjon av Argon2-parametere via
wp-config.php
Hva hashing er og hvorfor WordPress trenger det
Hashing er en enveis kryptografisk transformasjon. Fra en streng av vilkårlig lengde får du et «fingeravtrykk» med fast størrelse. Å reversere en hash tilbake til det opprinnelige passordet er matematisk umulig; du kan bare prøve ulike inndata og sammenligne de resulterende hashene.

I motsetning til kryptering, der data kan gjenvinnes med en nøkkel, er en hash en enveisbillett. Når du skriver inn et passord under pålogging, kjører WordPress det gjennom den samme hash-funksjonen og sammenligner resultatet med det som er lagret i databasen. Hvis de stemmer overens, gis tilgang. Hvis ikke, nektes tilgang.
WordPress lagrer hasher i wp_users-tabellen, i feltet user_pass. Hvis databasen lekker (og dette har skjedd selv for giganter: LinkedIn, Yahoo og Tumblr mistet hundrevis av millioner poster), får en angriper ikke lesbare passord, men lange bcrypt-strenger. Å gjenopprette passordet fra en slik streng er umulig. Men å gjette det gjennom et ordbokangrep er mulig hvis algoritmen er svak eller utdatert. Det er nettopp derfor utviklingen av hashing i WordPress betyr så mye.
Hvordan WordPress pleide å hashe passord: MD5 og phpass
Før versjon 2.5 (2008) brukte WordPress ren MD5. Algoritmen transformerer ethvert passord til en 128-bits hash bestående av 32 heksadesimale tegn. Det ser sikkert ut, men MD5 er sårbart for regnbuetabeller (forhåndsberegnede databaser med hasher for milliarder av vanlige passord). En hacker med databasetilgang slår ganske enkelt opp hashen i en slik tabell og henter øyeblikkelig det opprinnelige passordet.
Fra og med versjon 2.5 gikk WordPress over til phpass, et portabelt bibliotek basert på bcrypt (Blowfish). Det la til tilfeldig «salt» i passordet og kjørte resultatet gjennom hash-funksjonen flere ganger (som standard 2^8 = 256 iterasjoner). Salt gjorde regnbuetabeller ubrukelige: to identiske passord for ulike brukere produserte forskjellige hasher. Samtidig opprettholdt phpass bakoverkompatibilitet med MD5; gamle passord sluttet ikke å fungere og ble smidig oppgradert til det nye formatet ved pålogging.
Dette var tilstrekkelig i mange år. Men bransjen beveget seg fremover: moderne maskinvare (GPU-farmer og ASIC-er) kan prøve milliarder av hasher per sekund. Bcrypt-algoritmen med en konfigurerbar kostnadsfaktor ble industristandarden. Og fra og med WordPress 6.8 bruker kjernen den naturlig.
WordPress 6.8 og bcrypt: hva som endret seg
WordPress 6.8 «Cecil»-utgivelsen (april 2025) brakte en fullstendig overgang til bcrypt. Tidligere brukte kjernen sin egen PasswordHash-klasse fra phpass-biblioteket; nå kaller den den innebygde PHP-funksjonen password_hash() med konstanten PASSWORD_BCRYPT.

Viktige endringer i funksjonen wp_hash_password():
- bcrypt som standard. Alle nye passord hashes via
password_hash()ved hjelp av bcrypt-algoritmen og kostnadsfaktoren satt av PHP-serveren (vanligvis 10). - Auto-migrering av gamle passord. Når en bruker logger inn, sjekker WordPress via
password_needs_rehash()om hashen trenger oppdatering. Det gamle phpass-formatet ($P$...) erstattes sømløst med bcrypt. - Beskyttelse for lange passord. bcrypt avkorter passord lengre enn 72 byte, noe som reduserer entropien. WordPress 6.8 løser dette ved å forhåndshashe med SHA-384 ved hjelp av domenenøkkelen
wp-sha384og kode i base64. Et passord på 100 tegn beholder sin fulle styrke. - Filtre for fleksibel konfigurasjon. Nye kroker dukket opp:
wp_hash_password_algorithm(algoritmevalg) ogwp_hash_password_options(parametere: cost, memory_cost, threads).
Kallet til wp_hash_password() i WordPress 6.8-kjernen ser slik ut:
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 }
Funksjonen sjekker først om hashing-logikken har blitt overstyrt av en ekstern utvidelse (den globale variabelen $wp_hasher). Den avviser deretter passord lengre enn 4096 tegn; slike påloggingsforsøk returnerer *, noe som gjør autentisering umulig. Så kommer den interessante delen: filteret wp_hash_password_algorithm bestemmer algoritmen. Hvis valget IKKE er bcrypt, hashes passordet direkte. Hvis bcrypt er valgt, går passordet først gjennom SHA-384 med nøkkelen wp-sha384, kodes i base64, og først deretter sendes det til password_hash(). Resultatet er en hash med prefikset $wp, som skiller «WordPress»-bcrypt fra vanlig bcrypt. Dette er nyttig for databaserevisjoner eller integrasjon med eksterne systemer.
Hvordan styrke hashing med Argon2
bcrypt er en utmerket grunnlinje. Neste steg er Argon2, vinneren av Password Hashing Competition i 2015. Argon2 ble spesielt designet for å motstå GPU-angrep: det er minnekrevende, og skjermkort er flaskehalsen her.

Alternativ 1: kroken wp_hash_password_algorithm (WordPress 6.8+)
Legg dette til i barnetemaets functions.php eller via utvidelsen Code Snippets:
1 add_filter( 'wp_hash_password_algorithm', function() { 2 return PASSWORD_ARGON2ID; 3 });
I løpet av et par sekunder bytter WordPress til Argon2ID. Gamle passord rehashes automatisk når brukere logger inn. Hostingen din må støtte Argon2 i PHP; du trenger versjon 7.3 eller nyere for Argon2ID. Du kan sjekke tilgjengelighet ved å kalle password_algos().
For finjustering av parametere, bruk den tilhørende kroken:
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 );
Parameteren memory_cost bestemmer hvor mye minne algoritmen må bruke ved beregning av hashen; jo høyere verdi, desto vanskeligere blir GPU-basert brute-forcing. time_cost angir antall iterasjoner, og threads angir antall tråder.
Alternativ 2: utvidelsen PHP Native Password Hash
For WordPress-versjoner under 6.8 gjør utvidelsen PHP Native Password Hash det samme. Den erstatter all hashing-logikk med innebygd password_hash(), støtter bcrypt og Argon2, og har ikke noe grensesnitt; alle innstillinger konfigureres via konstanter i wp-config.php:
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 ] );
Utvidelsen har ikke blitt oppdatert på over to år, men koden er minimal og stabil. Med WordPress 6.8 er funksjonaliteten innebygd i kjernen, så du kan avinstallere den og bruke native filtre i stedet.
Hash-generatorer: hva som fungerer i dag
Det finnes situasjoner der du må generere en hash manuelt: å skrive et passord direkte til databasen via phpMyAdmin eller migrere brukere fra et eksternt system.

Den nettbaserte generatoren fra passwordtool.hu, populær i tiden med eldre WordPress-versjoner, er ikke lenger tilgjengelig: nettstedet skiftet eier. Fungerende alternativer i dag:
- WP-CLI: kommandoen
wp user update <id> --user_pass="newpassword"gjør alt riktig gjennomwp_hash_password(). Raskt, sikkert og garantert korrekt. - Et PHP-skript i nettstedets rot: opprett midlertidig en fil med et kall til
echo wp_hash_password('password');og slett den umiddelbart etter bruk. - En hvilken som helst online bcrypt-generator: for eksempel bcrypt.online. Men husk: WordPress 6.8 legger til
$wp-prefikset og SHA-384-forhashing, så en vanlig bcrypt-hash vil ikke fungere for direkte innsetting i databasen.
I praksis er WP-CLI det mest pålitelige alternativet.
Hvordan velge et passord som ikke blir knekt
Selv bcrypt redder deg ikke hvis passordet er admin123. Hackere starter angrepet med ordbokbasert brute force.

Verktøyet zxcvbn fra Dropbox, innebygd i WordPress for passordvurdering i administrasjonspanelet, avviser vanlige mønstre: fødselsdatoer, 123456 og qwerty, kjæledyrnavn. Det analyserer passord opp mot ordbøker, tastaturoppsett og mønstre for tegnerstatning. En vurdering på «svakt» betyr at passordet kan gjettes i løpet av sekunder.
Tre praktiske regler:
- Tilfeldige ord, ikke tegnsuppe. Et passord bestående av fire eller fem urelaterte engelske ord med skilletegn (for eksempel
correct-horse-battery-staple) er lettere å huske ennTr0ub4dor&3og tar langt lengre tid å knekke. - Lengde betyr mer enn kompleksitet. Seksten tilfeldige små bokstaver gir større entropi enn 8 tegn med spesialsymboler. Og bcrypt i WordPress 6.8 bevarer entropien til passord av enhver rimelig lengde gjennom SHA-384-forhashing.
- Bruk en passordbehandler. Menneskelig hukommelse er et dårlig verktøy for å håndtere et dusin unike passord. 1Password er den betalte gullstandarden med en familieplan, KeePass er gratis åpen kildekode med en lokal database, Bitwarden er den gylne middelvei: gratis, skybasert og åpen kildekode.

En passordbehandler genererer, lagrer og autofyller passord. Du trenger bare å huske ett hovedpassord. Og hvis nettstedet støtter tofaktorautentisering, aktiver det uten unntak. Et passord pluss en engangskode fra en app gjør innlogging praktisk talt usårbar.
Video: hvordan passordhashing fungerer i WordPress
En kort forklaring av hashingmekanismen, fra å skrive inn et passord til lagring i WordPress-databasen:
⁉️🤔 Ofte stilte spørsmål
Fungerer passord hashet med gammel MD5 fortsatt i WordPress 6.8+?
Ja. Når en bruker logger inn, oppdager WordPress det gamle hash-formatet, verifiserer passordet ved hjelp av den forrige algoritmen, og hvis alt stemmer, oppgraderer det sømløst hashen til bcrypt. Det er ikke nødvendig å slette gamle brukere eller tvinge frem tilbakestilling av passord.
Er PHP Native Password Hash-pluginen nødvendig på WordPress 6.8 og nyere?
Nei. Alt pluginen gjorde (hashing via
password_hash()og Argon2-støtte) er nå tilgjengelig gjennom de innebygde filtrenewp_hash_password_algorithmogwp_hash_password_options. Pluginen er kun relevant for versjoner under 6.8.
Kan jeg bytte tilbake fra Argon2 til bcrypt?
Teknisk sett ja, ved å endre algoritmen i filteret. Men gamle Argon2-hasher vil ikke bli gjenkjent, og brukere må tilbakestille passordene sine. Hvis du eksperimenterer med algoritmer på et aktivt nettsted, ta en full databasebackup først.
Hjelper bcrypt hvis databasen lekker?
bcrypt gjør brute force-angrep på passord fra lekke hasher hundretusenvis av ganger tregere enn MD5. Med en kostnadsfaktor på 10 tar én hash på en moderne CPU omtrent 0,1 sekunder å beregne; en milliard forsøk ville tatt årevis. Men hvis passordet er
password, vil det bli funnet i den aller første iterasjonen av et ordbokangrep. Algoritmen beskytter komplekse passord; ingenting kan redde svake.
Hvordan bekrefter jeg at passordene mine blir hashet med bcrypt?
Sjekk
wp_users-tabellen via phpMyAdmin. Feltetuser_passfor nye brukere (og de som logget inn etter oppgradering til 6.8) skal starte med$wp-prefikset (markøren for WordPress' nye bcrypt-format). Gamle phpass-hasher ser ut som$P$B.... For en masseutsjekk, kjør denne SQL-spørringen:SELECT COUNT(*) FROM wp_users WHERE user_pass NOT LIKE '$wp$%' AND user_pass NOT LIKE '$P$%';. Den vil vise hvor mange passord som sitter fast i et utdatert format, om noen.
Hva du bør gjøre med WordPress-hashing akkurat nå
Hvis WordPress-nettstedet ditt er på versjon 6.8 eller nyere, er du allerede beskyttet av bcrypt; det er ingenting du trenger å gjøre. Kjernen oppgraderer automatisk gamle hasher når brukere logger inn, og migreringen er fullstendig sømløs.
Ønsker du Argon2, legger du til wp_hash_password_algorithm-filteret med PASSWORD_ARGON2ID i functions.php. Sjekk først at hostingleverandøren din støtter Argon2: kjør var_dump(password_algos()); via et testskript. De fleste moderne hostingleverandører har støtte.
For versjoner under 6.8, installer utvidelsen PHP Native Password Hash; den gir deg bcrypt eller Argon2 uten å oppdatere kjernen. Og planlegg en WordPress-oppdatering mens du er i gang: hver større oppdatering lukker dusinvis av sårbarheter, ikke bare i hashing.
Og viktigst av alt, bytt ut admin123 med noe skikkelig. Ingen algoritme kan redde deg fra et ordbokangrep hvis passordet ditt er blant de første hundre oppføringene i rockyou.txt-listen.



