Bcrypt-generator och kontroll
Generera en bcrypt-hash med kostnadsfaktor 4 till 14, kontrollera ett lösenord mot en befintlig hash och se dess version, kostnad, salt och hash.
Hasha ett lösenord
- Version
- Kostnad
- Salt (22 tecken)
- Hash (31 tecken)
Kontrollera ett lösenord mot en hash
- Version
- Kostnad
- Salt (22 tecken)
- Hash (31 tecken)
Så hashar du ett lösenord med bcrypt
- Under Hasha ett lösenord skriver du in ditt Lösenord. En räknare visar längden i UTF-8-byte och varnar när den går över 72 byte.
- Välj Kostnadsfaktor (4–14). Raden under visar antalet rundor, till exempel 10 → 2^10 = 1 024 rundor.
- Klicka på Generera hash. En förloppsindikator följer arbetet, och sidan går att använda medan det pågår. När det är klart visar verktyget hur lång tid det tog och din Bcrypt-hash, redo att kopiera.
- Hashen delas upp i sina delar: Version, Kostnad, Salt (22 tecken) och Hash (31 tecken).
För att kontrollera ett lösenord mot en hash skriver du lösenordet, klistrar in hashen (den du just genererade fylls i automatiskt) och klickar på Kontrollera lösenord. Resultatet visar om de stämmer. Kryssa i Dölj lösenord för att maskera båda lösenordsfälten.
Hashningen körs i din webbläsare med biblioteket bcryptjs, som laddas först när du behöver det. Inget lösenord och ingen hash skickas någonstans.
Så fungerar bcrypt
bcrypt (Provos och Mazières, 1999) är en hashfunktion för lösenord byggd på chiffret Blowfish. Till skillnad från SHA-256 är den medvetet långsam, och långsamheten går att justera: kostnadsfaktorn är en tvåpotens, så varje steg uppåt fördubblar arbetet. Kostnad 10 betyder 1 024 iterationer av den dyra nyckeluppsättningen, kostnad 12 betyder 4 096. Den långsamheten märks knappt när en användare loggar in, men den gör det betydligt dyrare att knäcka en stulen databas med råstyrka.
En hash som $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy läses så här:
$2b$: versionen.$2a$och$2y$(PHP) är kompatibla och kan kontrolleras här.$2x$markerar hashar från en gammal implementation med en bugg och avvisas.10: kostnadsfaktorn.- De följande 22 tecknen: ett slumpmässigt salt på 128 bitar, i bcrypts egna Base64-alfabet (
./A-Za-z0-9). - De sista 31 tecknen: resultatet på 184 bitar.
Eftersom saltet är slumpmässigt och lagras i hashen ger samma lösenord två olika hashar om du hashar det två gånger, och båda verifieras korrekt. Det är också därför du kontrollerar ett lösenord med en verifieringsfunktion i stället för att jämföra hashar.
Välja kostnad
Välj den högsta kostnad din server klarar utan att inloggningen blir långsam, oftast runt en kvarts sekund per hash. OWASP rekommenderar minst kostnad 10 för bcrypt. Webbläsare kör bcrypt i JavaScript, vilket är flera gånger långsammare än en inbyggd implementation på en server: från kostnad 12 varnar verktyget för att hashningen kan ta från en till flera sekunder, och varje extra steg fördubblar tiden. Arbetet delas upp i korta bitar, så sidan fryser inte.
För nya system föredrar OWASP numera Argon2id, men bcrypt är fortfarande godtagbart där Argon2id inte finns.
Gränsen på 72 byte
bcrypt använder bara de första 72 byten av lösenordet. Allt därefter ignoreras utan varning. Byte är inte samma sak som tecken: å, ä och ö tar 2 byte var i UTF-8 och en emoji tar 4. Två långa lösenord som har samma första 72 byte ger samma hash. Byteräknaren varnar när ett lösenord är för långt. Vissa system förhashar långa lösenord (till exempel med HMAC-SHA256 och sedan Base64) innan bcrypt. Gör du det ska du aldrig skicka in råa binära hashvärden, eftersom en nollbyte avslutar lösenordet i förtid i många implementationer.
Vanliga frågor
Varför ger samma lösenord en ny hash varje gång?
Varje hash får ett nytt slumpmässigt salt som lagras inuti hashen. Knappen Kontrollera lösenord läser salt och kostnad från hashen och räknar om den, så varje version verifieras.
Kan en bcrypt-hash dekrypteras?
Nej. bcrypt är en envägsfunktion. Det enda sättet att få fram ett lösenord är att gissa och hasha varje gissning, och det är just det som kostnadsfaktorn gör långsamt.
Vilken kostnadsfaktor ska jag använda?
Minst 10, och mer om din server fortfarande är tillräckligt snabb. Mät på din produktionsmaskinvara: tiden som visas här gäller JavaScript i din webbläsare, som oftast är långsammare än en server.
Är hashar med $2a$, $2b$ och $2y$ utbytbara?
För lösenord under 256 byte ger de samma resultat, och verktyget kontrollerar alla tre. $2b$ rättade en bugg med längdöverslag i OpenBSD:s implementation, och $2y$ är PHP:s namn på en korrekt implementation.
Är det säkert att skriva in ett riktigt lösenord här?
Allt körs lokalt och ingenting skickas eller sparas. För riktiga konton är det ändå god praxis att testa med ett exempellösenord i stället för ett som du använder.
Relaterade verktyg
- Hashgenerator Generera MD5-, SHA-1-, SHA-256- och SHA-512-hashar av text eller filer i valfri storlek och kontrollera kontrollsummor. Allt körs i din webbläsare.
- Lösenordsgenerator Gratis lösenordsgenerator som skapar starka slumpade lösenord på 4 till 128 tecken i webbläsaren med säker slumpgenerator. Inget sparas eller skickas.
- Lösenordskontroll Testa hur starkt ditt lösenord är. Se poäng, uppskattad knäcktid för fyra angreppsscenarier och konkreta tips, allt kontrollerat lokalt i webbläsaren.
- HMAC-generator Beräkna HMAC-SHA1, SHA-256, SHA-384 eller SHA-512 med en nyckel i text, hex eller Base64, få hex och Base64 och kontrollera en webhook-signatur.