Instellingen
Genereert bcrypt-hashes om wachtwoorden op te slaan en controleert of een wachtwoord bij een bestaande hash hoort. In de modus Genereren kies je de kosten en de versie; in de modus Controleren plak je de hash en het wachtwoord dat je wilt controleren. Het resultaat toont elk deel van de hash en hoe lang de berekening duurde.

Een bcrypt-hash kan niet worden "ontsleuteld": gebruik de modus Controleren om te weten of een wachtwoord juist is. Alles wordt in je browser berekend en het wachtwoord wordt naar geen enkele server verzonden.

Parameters
Tussen 4 en 15

Huidige versie. Wordt gegenereerd door OpenBSD, Node.js, Python, Go en Rust.

Elk extra kostenpunt verdubbelt de rekentijd. OWASP raadt minimaal 10 aan; ideaal is de hoogste waarde die je server in ongeveer 250 ms berekent.

0 van 72 bytes

Hoe het werkt

bcrypt is een hashfunctie die is ontworpen om wachtwoorden op te slaan. Anders dan SHA-256 of MD5, die in microseconden worden berekend, is bcrypt met opzet traag: wie een database steelt, is zo jaren bezig om wachtwoorden met brute force uit te proberen.

Elke hash bevat alles wat nodig is om hem te controleren: de versie van het algoritme, de kosten en een willekeurige salt van 128 bits. Daarom levert hetzelfde wachtwoord elke keer een andere hash op en hoef je de salt niet apart op te slaan.

De kosten zijn de logaritme met grondtal 2 van het aantal rondes: bij kosten 10 worden 1024 rondes berekend en bij 12 zijn dat er 4096. Elk punt erbij verdubbelt de rekentijd, zodat je de groeiende rekenkracht van hardware kunt bijhouden zonder van algoritme te wisselen.

Voorbeelden

rasmuslerdorf$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1aHet voorbeeld van password_verify() uit de PHP-handleiding: plak het in de modus Controleren met dat wachtwoord en het komt overeen.
abc$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0iEen testvector van jBCrypt met kosten 6. De eerste 22 tekens na de kosten zijn de salt; de overige 31 de hashwaarde.

Gebruiksscenario's

  • De hash van het startwachtwoord van een beheerder maken om die rechtstreeks in de database in te voegen.
  • Controleren of een wachtwoord bij de opgeslagen hash hoort wanneer een gebruiker niet kan inloggen.
  • Testhashes genereren voor fixtures, seeds of geautomatiseerde tests van een Laravel-, Spring-, Django- of Node.js-applicatie.
  • Meten hoe lang elke kostenwaarde duurt om de juiste waarde te kiezen voordat je die op de server instelt.
  • Regels maken voor .htpasswd-bestanden van Apache, die bcrypt-hashes met het voorvoegsel $2y$ accepteren.

Veelgestelde vragen

Kan een bcrypt-hash worden ontsleuteld?

Nee. bcrypt is een eenrichtingsfunctie: er is geen manier om het wachtwoord uit de hash te halen. Het enige wat kan, is kandidaat-wachtwoorden uitproberen en kijken of er een overeenkomt, en precies dat maakt bcrypt traag.

Wat is het verschil tussen $2a$, $2b$ en $2y$?

Voor normale wachtwoorden berekenen ze alle drie hetzelfde. $2a$ is de oorspronkelijke versie; $2y$ werd in 2011 door PHP ingevoerd om zijn hashes te onderscheiden van die van een implementatie met een fout; $2b$ werd in 2014 door OpenBSD ingevoerd bij het herstellen van een andere fout met wachtwoorden van meer dan 255 tekens. Bijna alle bibliotheken accepteren ze alle drie bij het controleren.

Welke kosten kan ik het beste gebruiken?

OWASP raadt minimaal 10 aan. Ideaal is de hoogste waarde die je server in ongeveer 250 ms per aanmelding kan berekenen. Spring Security gebruikt standaard 10; Laravel 11 en PHP 8.4 hebben hun standaard verhoogd naar 12.

Waarom negeert bcrypt alles boven 72 bytes?

Het algoritme gebruikt het wachtwoord als Blowfish-sleutel, die maximaal 72 bytes kan zijn. De rest wordt zonder waarschuwing weggegooid, dus twee wachtwoorden met dezelfde eerste 72 bytes leveren dezelfde hash op. Tekens met accenten of emoji's beslaan twee tot vier bytes, daarom telt de tool bytes en geen tekens.

Is bcrypt of Argon2 beter?

Argon2id is tegenwoordig het aanbevolen algoritme voor nieuwe systemen, omdat het niet alleen traag is maar ook veel geheugen gebruikt, wat aanvallen met GPU's duurder maakt. Toch blijft bcrypt veilig met passende kosten en is het de standaard in PHP, Laravel, Spring en Ruby on Rails.

Wordt mijn wachtwoord naar een server verzonden?

Nee. De hash en de controle worden in je browser berekend en het wachtwoord verlaat nooit je apparaat; het wordt ook niet opgenomen in de link om de tool te delen.