Bcrypt-hashgenerator & Verificatie
Zet een wachtwoord om in een $2b$ bcrypt-hash, of controleer een wachtwoord tegen een hash die je al hebt. Het hashen gebeurt in een Web Worker in je browser — niets wat je typt wordt ergens naartoe verstuurd.
Plak nooit een echt productiewachtwoord in een online tool — deze inbegrepen.
Invoer
Wachtwoord en cost
Voor elke hash wordt een nieuwe salt van 16 bytes getrokken, dus hetzelfde wachtwoord levert elke keer een andere hash op. Dat is het doel van een salt, geen bug.
Cost 10 betekent 2^10 = 1,024 key-setup rondes. Elke stap omhoog verdubbelt het werk — voor iemand die een gestolen wachtwoordbestand kraakt, en voor je eigen server bij elke login. De meeste productiesystemen zitten tussen 10 en 12.
De drie prefixen produceren identieke hashbytes voor wachtwoorden onder 72 bytes; alleen het label verschilt. PHP's ingebouwde crypt() herkent $2b$ niet, waardoor een $2b$-hash password_verify() stilzwijgend laat falen. Kies $2y$ voor PHP.
Het hashen gebeurt in een Web Worker binnen dit tabblad. Het wachtwoord wordt nooit naar Wespner of iemand anders verstuurd — er is geen request die dit zou doen.
Resultaat
bcrypt-hash
Klik op “Hash genereren”.
Cost, hier gemeten
Wat deze instelling je kost
Schatting: in dit tabblad wordt één hash op cost 8 getimed en elke andere cost wordt daarvan geëxtrapoleerd door te verdubbelen. Je eigen hardware en browser bepalen het getal.
Die getallen zijn van één JavaScript-thread. Een echte aanvaller draait native code op een rek vol GPU's en is ordes van grootte sneller — precies dat verschil is waarom de cost factor oncomfortabel moet zijn in plaats van praktisch. Dezelfde schuifregelaar bepaalt ook hoeveel CPU elke login van jezelf verbruikt.
De string lezen
Wat de 60 tekens betekenen
$2b$12$LQv3c1yqBWVHxkd0LHAkCOYUtYgBuLIjrsGrDUgYqZbY7d0RfPbtq
Beide blokken gebruiken bcrypt's eigen base64-alfabet, dat begint met ./ en de cijfers achteraan zet — dit is geen standaard base64, en het decoderen alsof het dat wel is levert de verkeerde bytes op. Dat, samen met de 22/31-splitsing, is een snelle manier om te controleren of een string echt een bcrypt-hash is en niet iets dat er alleen op lijkt.
Een algoritme kiezen
bcrypt, scrypt of Argon2?
Deze tool is bewust alleen voor bcrypt. Hier lees je wanneer dat de juiste keuze is en wanneer niet.
Bewust traag, maar leunt alleen op CPU-tijd en een vaste 4 KB aan geheugen. GPU's en FPGA's paralleliseren dit veel beter dan de nieuwere ontwerpen. Het blijft een volkomen respectabele keuze, wordt letterlijk overal ondersteund, en de limiet van 72 bytes per wachtwoord is de meest verrassende valkuil.
Voegt een instelbare geheugenkost toe, zodat een aanvaller per poging RAM nodig heeft, niet alleen cores. Moeilijker om goedkoop te paralleliseren dan bcrypt.
Winnaar van de Password Hashing Competition van 2015 en wat OWASP nu aanraadt voor nieuwe systemen: aparte instelbare tijd, geheugen en parallellisme, waarbij de id-variant bestand is tegen zowel GPU- als side-channel-aanvallen. Begin je iets nieuws en heeft je platform het? Gebruik het dan. Onderhoud je iets dat al $2y$-hashes opslaat, dan is bcrypt met een verstandige cost geen noodgeval — hash in plaats daarvan opnieuw bij de volgende login.
Bewijs
Controleer deze pagina aan de hand van de gepubliceerde testvectoren
Een hashing-tool die om vertrouwen vraagt, moet controleerbaar zijn. Dit zijn de referentie-bcryptvectoren die door van OpenBSD afgeleide implementaties worden gebruikt; de pagina berekent elke vector opnieuw vanuit de eigen salt en vergelijkt teken voor teken, en hasht en verifieert daarna een wegwerpwachtwoord opnieuw bij twee cost factors.
De batch draait 6 gepubliceerde vectoren plus twee round trips.
Beheer je een eigen gameserver?
Wespner-gameservers met DDoS-bescherming, NVMe-schijven en activering binnen enkele minuten.