Skip to content

Bcrypt-hashgenerator & -verifier

Genereer en verifieer bcrypt-wachtwoordhashes online — instelbare kostenfactor, $2b$/$2a$/$2y$-prefixes. 100% in je browser; je wachtwoord wordt nooit geüpload.

Geen tracking Draait in je browser Gratis
100% in je browser — je wachtwoord verlaat nooit je apparaat.
Bcrypt-hash
Opbouw van de hash
Versie
Kostenfactor
Salt
Digest

Volgt het referentiegedrag van bcrypt, met uitvoer gecontroleerd tegen Node bcrypt, Python bcrypt en Apache htpasswd — Go Tools Beveiligingsteam · Jun 12, 2026

Wat is bcrypt?

Bcrypt is een wachtwoordhashfunctie die specifiek is ontworpen om wachtwoorden veilig op te slaan. In plaats van een wachtwoord in platte tekst te bewaren, slaat een server een eenrichtings bcrypt-hash op; wanneer een gebruiker zich aanmeldt, hasht de server het ingediende wachtwoord op dezelfde manier en controleert of de twee hashes overeenkomen. Bcrypt is gebouwd op de Blowfish-cipher en werd in 1999 ontworpen door Niels Provos en David Mazières, met één bewuste eigenschap die het onderscheidt van algemene hashes zoals SHA-256: het is met opzet traag, en je kunt het na verloop van tijd nog trager maken met een instelbare kostenfactor naarmate hardware sneller wordt.

Een bcrypt-hash is één zichzelf beschrijvende string van 60 tekens — bijvoorbeeld $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq. Hij bundelt vier delen: de versie ($2b$), de kostenfactor (12, een logaritmische work factor), een 22 tekens lange Base64-salt en de 31 tekens lange Base64-digest. Omdat de salt willekeurig is en in de hash is ingebed, levert hetzelfde wachtwoord elke keer een andere hash op — wat rainbow tables verslaat en verbergt dat twee gebruikers hetzelfde wachtwoord hebben gekozen. Verificatie leest de salt en kostenfactor weer uit de opgeslagen hash en hasht de kandidaat opnieuw, zodat bcrypt nooit een hash hoeft (en kan) terug te draaien om het wachtwoord te herstellen.

Deze tool draait volledig in je browser met een meegeleverde bcrypt-implementatie — er wordt nooit een wachtwoord of hash geüpload. Gebruik hem om een hash te genereren met een gekozen kostenfactor en prefix, om een wachtwoord te verifiëren tegen een bestaande hash, en om de opbouw van een hash te lezen. Hij past natuurlijk bij andere beveiligingstools: beveilig een map met HTTP Basic Auth via onze htpasswd-generator (die rechtstreeks bcrypt-entries kan uitgeven), maak een sterk wachtwoord om te hashen met onze generator voor willekeurige wachtwoorden, en grijp naar onze SHA-256-generator wanneer je een snelle algemene checksum nodig hebt in plaats van een trage wachtwoordhash. Als je beslist met welk algoritme je wachtwoorden opslaat, vergelijk dan de opties in bcrypt vs Argon2 vs scrypt.

// Node.js — bcryptjs / bcrypt (emits $2b$)
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash('correct horse battery staple', 12);
// -> $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
const ok = await bcrypt.compare('correct horse battery staple', hash); // true

# Python — bcrypt
import bcrypt
hashed = bcrypt.hashpw(b'correct horse battery staple', bcrypt.gensalt(12))
bcrypt.checkpw(b'correct horse battery staple', hashed)  # True

# PHP — password_hash (emits $2y$)
$hash = password_hash('correct horse battery staple', PASSWORD_BCRYPT, ['cost' => 12]);
password_verify('correct horse battery staple', $hash); // true

# Apache htpasswd CLI — bcrypt entry to stdout (-B bcrypt, -b inline, -n stdout)
htpasswd -Bbn admin 'correct horse battery staple'
# -> admin:$2y$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq

Belangrijkste functies

Bcrypt-hashes genereren

Maak een standaard bcrypt-hash van 60 tekens uit elk wachtwoord met een nieuwe willekeurige salt. Elke klik levert een andere geldige hash op, precies zoals een echte wachtwoordopslag zou doen.

Instelbare kostenfactor

Stem de work factor af van 4 tot 15 (12 is de moderne standaard). Voel hoe elke stap de rekentijd ongeveer verdubbelt, zodat je een kostenfactor kunt kiezen die sterk maar toch snel genoeg is voor aanmelden.

Kies de versieprefix

Geef $2b$ (de huidige bcryptjs-standaard), $2y$ (PHP / Apache htpasswd) of $2a$ (de oorspronkelijke) uit. Ze zijn allemaal uitwisselbaar voor verificatie over bibliotheken heen.

Een wachtwoord tegen een hash verifiëren

Plak een opgeslagen hash en een kandidaatwachtwoord om meteen te bevestigen of ze overeenkomen — opnieuw hashen met de ingebedde salt en kostenfactor, nooit ontsleutelen. Ideaal om een mislukte aanmelding te debuggen.

Opbouw van de hash ontleed

Zie elke bcrypt-hash opgesplitst in versie, kostenfactor, salt en digest, zodat de structuur van de $2b$12$...-string in één oogopslag duidelijk is.

100% aan de clientzijde

Al het hashen en verifiëren gebeurt lokaal in je browser. Er wordt nooit een wachtwoord of hash naar een server gestuurd, zodat je privé met echte inloggegevens kunt werken.

Voorbeelden van de Bcrypt-generator

bcrypt-hash (kostenfactor 12, $2b$)

wachtwoord: correct horse battery staple
kostenfactor: 12
prefix: $2b$
$2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq

Een bcrypt-hash met kostenfactor 12 en de $2b$-prefix. De salt is willekeurig, dus hetzelfde wachtwoord levert elke keer een andere hash op — toch verifiëren ze allemaal tegen het oorspronkelijke wachtwoord.

Een wachtwoord verifiëren tegen een hash

wachtwoord: correct horse battery staple
hash: $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
✓ Komt overeen — het wachtwoord is juist voor deze hash

Verifiëren ontsleutelt de hash niet. bcrypt hasht het opgegeven wachtwoord opnieuw met de salt en kostenfactor die in de opgeslagen hash zitten en vergelijkt vervolgens het resultaat. Een overeenkomst betekent dat het wachtwoord juist is.

Opbouw van een hash ontleed

$2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
versie: $2b$ · kostenfactor: 12 · salt: dUSFKqT1FCMYZ6hcQfsxuO · digest: NizEqcX8IGK8snfVSowP5Uu.TDJoPUq

Elke bcrypt-hash beschrijft zichzelf: een versielabel, een tweecijferige kostenfactor, een 22 tekens lange Base64-salt en een 31 tekens lange Base64-digest, allemaal in één string van 60 tekens. De tool splitst deze uit, zodat je ze in één oogopslag kunt lezen.

De Bcrypt-generator gebruiken

  1. 1

    Voer een wachtwoord in & kies de kostenfactor

    Typ op het tabblad Genereren een wachtwoord of klik op Willekeurig wachtwoord. Kies een kostenfactor (4–15; 12 is de moderne standaard) en een versieprefix — $2b$, $2a$ of $2y$ — die past bij je stack.

  2. 2

    Genereer de hash

    De bcrypt-hash wordt lokaal berekend met een nieuwe willekeurige salt en verschijnt als één string van 60 tekens $2b$12$... Klik op Kopiëren om hem op te halen, of genereer opnieuw voor een nieuwe gesalte hash.

  3. 3

    Lees de opbouw of verifieer

    Het opbouwpaneel splitst de hash in versie, kostenfactor, salt en digest. Schakel naar het tabblad Verifiëren om een opgeslagen hash en een wachtwoord te plakken en meteen te bevestigen of ze overeenkomen.

Common Errors

Proberen een hash te ontsleutelen

Bcrypt is eenrichting; er is geen ontsleuteling. Om een wachtwoord te controleren, verifieer je het tegen de hash in plaats van de digest terug te draaien.

✗ Fout
bcrypt.decrypt(hash)  // no such operation
✓ Correct
bcrypt.compare(password, hash)  // returns true / false

De kostenfactor te laag instellen

Een lage kostenfactor zoals 4 of 6 hasht vrijwel onmiddellijk, waardoor aanvallers gelekte hashes ook snel kunnen brute-forcen. Gebruik 12 als basislijn.

✗ Fout
cost: 4  // far too fast, weak against brute force
✓ Correct
cost: 12  // modern default, resists brute force

Twee keer dezelfde hash verwachten

Omdat de salt willekeurig is, levert hetzelfde wachtwoord opnieuw hashen een andere string op. Vergelijk met verifiëren, nooit door twee hashes op byte-gelijkheid te controleren.

✗ Fout
hash(pw) === storedHash  // fails — different salts
✓ Correct
bcrypt.compare(pw, storedHash)  // correct check

Veelvoorkomende toepassingen

Een wachtwoordhash in een database vullen
Genereer een bcrypt-hash voor een beheerders- of testaccount en voeg hem rechtstreeks in je gebruikerstabel in, zodat je je kunt aanmelden zonder eerst een volledige registratieflow op te zetten.
Een mislukte aanmelding debuggen
Verifieer een bekend goed wachtwoord tegen de opgeslagen hash om te bevestigen of de hash zelf klopt, en isoleer zo de bug van je authenticatiecode.
De juiste kostenfactor kiezen
Genereer op meerdere kostenniveaus op je eigen hardware om te voelen hoe lang elk duurt, en kies dan een work factor die brute force weerstaat zonder echte aanmeldingen te vertragen.
htpasswd- / Basic Auth-entries maken
Maak een $2y$ bcrypt-hash voor een Apache-, Docker Registry- of Caddy-inloggegeven en plaats die in een gebruiker:hash-regel voor HTTP Basic Auth.
Testfixtures bouwen
Maak per-wachtwoord-deterministische bcrypt-hashes om integratietests van een aanmeld- of wachtwoordherstelflow te vullen zonder een echte auth-server op te zetten.
Een gevonden hash auditen
Lees de opbouw van een bcrypt-string in een configuratie of dump om de kostenfactor te controleren, en verifieer hem tegen het wachtwoord dat je verwacht om een overeenkomst te bevestigen.

Technische details

Blowfish-gebaseerd, adaptieve kostenfactor
Bcrypt leidt zijn hash af van de dure sleutelopzet van de Blowfish-cipher, herhaald 2^kostenfactor keer. De kostenfactor met één verhogen verdubbelt het werk en houdt de functie traag tegen brute force naarmate hardware verbetert.
Willekeurige salt van 128 bits
Elke hash bevat een willekeurige salt van 16 bytes (128 bits), Base64-gecodeerd als 22 tekens na de kostenfactor. De salt maakt elke hash uniek, zodat identieke wachtwoorden nooit een digest delen en rainbow tables niet van toepassing zijn.
Zelfbeschrijvend formaat van 60 tekens
De uitvoer is $versie$kostenfactor$salt+digest — een vaste string van 60 tekens die alles bevat wat nodig is om hem te verifiëren. Er is geen aparte salt-kolom of parameteropslag vereist.
Wachtwoordlimiet van 72 bytes
Bcrypt hasht alleen de eerste 72 bytes van een wachtwoord; alles daarbuiten wordt stilzwijgend genegeerd. Voor zeer lange wachtwoordzinnen is voorafgaand hashen (bijvoorbeeld met SHA-256) vóór bcrypt een veelgebruikte mitigatie.
Verifiëren, niet ontsleutelen
Bcrypt is eenrichting. Verificatie draait de hash opnieuw op het kandidaatwachtwoord met de salt en kostenfactor die uit de opgeslagen hash zijn geparseerd, en vergelijkt vervolgens de digests in constante tijd. Er is geen bewerking die de platte tekst herstelt.
Eerlijkheidsnotities & kanttekeningen
Hashes worden lokaal berekend en nooit tegen een live systeem gecontroleerd. Gekopieerde hashes en elk wachtwoord dat je typte leven op je klembord en in het browsergeheugen — behandel ze als geheimen en wis je klembord nadat je in productie hebt geplakt.

Best practices

Gebruik kostenfactor 12 of hoger
Kostenfactor 12 is de moderne basislijn; verhoog hem richting 14 voor gevoelige systemen zolang de aanmeldlatentie acceptabel blijft. Evalueer periodiek opnieuw — wat vijf jaar geleden traag genoeg was, is vandaag goedkoop aan te vallen.
Sla of log nooit platte tekst op
Sla alleen de bcrypt-hash op, nooit het oorspronkelijke wachtwoord, en houd wachtwoorden uit logs en foutmeldingen. De hele waarde van bcrypt gaat verloren als de platte tekst er samen mee lekt.
Laat bcrypt de salt afhandelen
Bcrypt genereert en bedt een veilige willekeurige salt voor je in. Geef geen eigen statische salt op en hergebruik er geen — een willekeurige salt per hash is wat rainbow tables verslaat.
Let op de limiet van 72 bytes
Als je lange wachtwoordzinnen accepteert, onthoud dan dat bcrypt bytes voorbij 72 negeert. Overweeg voorafgaand hashen met SHA-256, of beoordeel Argon2id, wanneer zeer lange invoer volledig moet worden gedekt.

Veelgestelde vragen over de Bcrypt-generator

Is een online bcrypt-generator veilig om te gebruiken?
Met deze wel — want niets wat je typt verlaat ooit je browser. Het wachtwoord, de gegenereerde hash en de verificatie draaien allemaal lokaal in JavaScript op je eigen apparaat. Er zijn geen netwerkverzoeken, geen logging en geen opslag: je kunt het bevestigen door de Ontwikkelaarstools van je browser te openen (F12 → tabblad Netwerk) terwijl je een hash genereert en te letten op nul uitgaande verzoeken, of door de internetverbinding te verbreken en te zien dat de tool gewoon blijft werken. Dat is het tegenovergestelde van een dubieuze generator die je wachtwoord via POST naar een server stuurt. Geef als gewoonte toch de voorkeur aan een wegwerpwachtwoord boven een echt productiewachtwoord wanneer je alleen aan het experimenteren bent.
Hoe genereer ik online een bcrypt-hash?
Open het tabblad Genereren, typ een wachtwoord (of klik op Willekeurig wachtwoord om een sterk wachtwoord aan te maken), kies een kostenfactor — 12 is de moderne standaard — en kies een versieprefix: $2b$ voor de meeste moderne stacks, $2y$ voor PHP en Apache, of $2a$ voor de oorspronkelijke identifier. De bcrypt-hash wordt meteen in je browser berekend met een nieuwe willekeurige salt en verschijnt als één string van 60 tekens $2b$12$... die je met één klik kunt kopiëren. Er wordt niets geüpload: het wachtwoord en de hash verlaten nooit je apparaat. Genereer op elk moment opnieuw om nog een geldige hash voor hetzelfde wachtwoord te krijgen, aangezien elke hash een andere willekeurige salt bevat.
Kan een bcrypt-hash worden ontsleuteld of teruggedraaid?
Nee. bcrypt is een eenrichtings-wachtwoordhashfunctie, geen versleuteling, dus er is geen sleutel en geen ontsleutelbewerking die een hash terugverandert in het oorspronkelijke wachtwoord. De enige manier om het wachtwoord uit een hash te achterhalen is kandidaten gokken en elke kandidaat hashen tot het overeenkomt — wat precies is waar bcrypts instelbare kostenfactor voor is ontworpen: het traag en duur maken. Daarom verifieer je een wachtwoord tegen een hash in plaats van het te ontsleutelen: de tool hasht je kandidaat opnieuw met de salt en kostenfactor die in de hash zijn opgeslagen en controleert of het resultaat identiek is.
Welke kostenfactor (work factor) moet ik gebruiken?
Kostenfactor 12 is de moderne standaard en een verstandige balans tussen veiligheid en snelheid. De kostenfactor is een logaritmische work factor: elke verhoging verdubbelt het aantal interne rondes, dus kostenfactor 13 kost ongeveer twee keer zo lang om te berekenen en te verifiëren als kostenfactor 12, en kostenfactor 11 kost de helft van de tijd. Hogere kosten vertragen aanvallers die gelekte hashes brute-forcen, maar voegen ook latentie toe aan elke legitieme aanmelding, dus verhoog hem niet tot voorbij het punt waarop authenticatie traag aanvoelt op je echte hardware. Kostenfactor 10 is acceptabel voor endpoints met laag risico; 12–14 past bij alles wat gevoelig is. Het geldige bereik is 4 tot 31, en met deze tool kun je 4 tot 15 kiezen.
Wat is het verschil tussen $2a$, $2b$ en $2y$?
Het zijn versieprefixes voor hetzelfde bcrypt-algoritme, en de verschillen gaan terug op historische bugfixes in de manier waarop sommige implementaties met stringlengte en tekens met een hoge bit omgingen. $2a$ is de oorspronkelijke, breed gebruikte identifier; $2b$ is de gecorrigeerde huidige versie die de bcryptjs-bibliotheek en de meeste moderne implementaties uitgeven; en $2y$ is de identifier die PHP en Apache's htpasswd gebruiken. Voor verificatie zijn ze uitwisselbaar — een hash die je hier met welke prefix dan ook genereert, valideert correct over bibliotheken heen, omdat ze allemaal dezelfde kernfunctie draaien. Kies de prefix die je stack verwacht als je byte-voor-byte-compatibiliteit nodig hebt.
Hoe verifieer ik een wachtwoord tegen een bcrypt-hash?
Schakel naar het tabblad Verifiëren, plak de opgeslagen bcrypt-hash (de volledige $2b$12$...-string) en het kandidaatwachtwoord, en de tool vertelt je meteen of ze overeenkomen. Het werkt door de salt en kostenfactor die in de hash zitten te extraheren, het kandidaatwachtwoord opnieuw te hashen met precies die parameters en de nieuwe digest met de opgeslagen digest te vergelijken — er komt geen ontsleuteling aan te pas. Zo controleert een aanmeldsysteem een wachtwoord: het herstelt nooit de platte tekst, het bevestigt alleen dat het opnieuw hashen van het ingediende wachtwoord de opgeslagen hash reproduceert.
bcrypt vs Argon2 vs scrypt — welke moet ik gebruiken?
Alle drie zijn bewust trage, gesalte wachtwoordhashfuncties, en ze zijn allemaal veel beter dan een kale SHA-256 voor het opslaan van wachtwoorden. bcrypt is de breedst ondersteunde en meest beproefde, met een eenvoudig instelbare kostenfactor; de belangrijkste beperkingen zijn een wachtwoordlimiet van 72 bytes en dat het alleen CPU-gebonden is. scrypt voegt geheugenhardheid toe, waardoor grootschalige GPU/ASIC-aanvallen duurder worden. Argon2 (specifiek Argon2id) is de huidige aanbeveling van de Password Hashing Competition en OWASP, die tijd, geheugen en parallellisme onafhankelijk afstemt. Als je vandaag opnieuw kiest, is Argon2id de sterkste standaard; bcrypt blijft een uitstekende, veilige keuze — vooral waar bibliotheekondersteuning of interoperabiliteit telt. We behandelen de afwegingen uitgebreid in bcrypt vs Argon2 vs scrypt.
Waarom is de bcrypt-hash elke keer anders?
Omdat bcrypt voor elke hash een nieuwe willekeurige salt genereert, en de salt wordt vóór het hashen ingemengd. Hetzelfde wachtwoord levert daarom elke keer dat je op Genereren klikt een totaal andere string van 60 tekens op — en dat is precies de bedoeling: het belet aanvallers om rainbow tables vooraf te berekenen of te zien dat twee gebruikers hetzelfde wachtwoord delen. De salt is niet geheim; hij wordt direct in de hash opgeslagen (de 22 tekens na de kostenfactor), zodat verificatie hem weer kan uitlezen. Als je de hash opnieuw genereert, krijg je gewoon een andere geldige hash voor hetzelfde wachtwoord, en ze verifiëren allemaal met succes.

Gerelateerde tools

Alle tools bekijken →