AES-versleutelingstool — GCM, CBC & CTR
Gratis AES-versleuteling online — AES-128/192/256, GCM/CBC/CTR, wachtwoordzin (PBKDF2) of ruwe sleutel. Draait 100% in je browser; niets wordt geüpload.
Geavanceerde opties
Hergebruik nooit een IV met dezelfde sleutel. Laat leeg om een veilige willekeurige IV te genereren.
Wat is AES-versleuteling?
AES (de Advanced Encryption Standard) is een symmetrisch blokcijfer, gestandaardiseerd door NIST in FIPS 197 in 2001, gebaseerd op het Rijndael-ontwerp van Joan Daemen en Vincent Rijmen. Het versleutelt data in vaste blokken van 128 bit met een sleutel van 128, 192 of 256 bit, waarbij dezelfde sleutel zowel versleutelt als ontsleutelt. Het is het werkpaard van de moderne cryptografie en beschermt alles van HTTPS-verkeer tot schijfversleuteling.
Een kaal blokcijfer husselt slechts één blok van 16 byte door elkaar, dus AES draait altijd binnen een bedrijfsmodus die blokken aan elkaar koppelt. Deze tool biedt er drie, allemaal native geleverd door de Web Crypto API van de browser: GCM, CBC en CTR. GCM (Galois/Counter Mode, NIST SP 800-38D) is de aanbevolen standaard omdat het geauthenticeerd is — het produceert een 128-bit authenticatietag naast de cijfertekst, zodat elke manipulatie wordt gedetecteerd bij het ontsleutelen. CBC en CTR bieden alleen vertrouwelijkheid; op zichzelf kunnen ze je niet vertellen of de cijfertekst is gewijzigd, wat de reden is waarom TLS 1.3 (RFC 8446) elke CBC-cijfersuite liet vallen ten gunste van geauthenticeerde modi zoals GCM.
Je zult merken dat er hier geen ECB-modus is, en dat is opzettelijk. ECB versleutelt elk identiek blok platte tekst naar hetzelfde cijfertekstblok, waardoor grootschalige structuur er zo doorheen lekt — de beroemde 'ECB-pinguïn'-afbeelding is na versleuteling nog altijd duidelijk herkenbaar als pinguïn. De Web Crypto API laat ECB precies om deze reden weg (hij implementeert alleen AES-CBC, AES-CTR en AES-GCM), en wij dus ook. Als je moet interopereren met een verouderd systeem dat ECB gebruikte, zie dat dan als een reden om het te migreren, niet om de zwakte te reproduceren.
Omdat de meeste mensen een wachtwoordzin typen in plaats van een willekeurige sleutel van 32 byte, leidt de tool de AES-sleutel van je wachtwoordzin af met PBKDF2-HMAC-SHA256 bij 600.000 iteraties en een willekeurige salt van 16 byte, in lijn met de huidige OWASP-richtlijn voor wachtwoordopslag (en NIST SP 800-132, die een salt van minstens 128 bit vereist). Dat maakt brute-forcen van een zwakke wachtwoordzin traag, maar het is geen magie: dit is een tool om modi te leren, cijfertekst te debuggen en voor eenmalige persoonlijke data — niet om productiegeheimen te beschermen, die thuishoren in een toegewijd sleutelbeheersysteem. Voor een sterke wachtwoordzin genereer je er een met onze willekeurige-wachtwoordgenerator; voor een echte willekeurige sleutel gebruik je de geheime-sleutelgenerator.
// AES-256-GCM with a passphrase (PBKDF2-HMAC-SHA256, 600,000 iterations).
// Identical code runs in the browser and in Node.js 20+ via Web Crypto.
async function aesGcmEncrypt(plaintext, passphrase) {
const enc = new TextEncoder();
const salt = crypto.getRandomValues(new Uint8Array(16));
const iv = crypto.getRandomValues(new Uint8Array(12));
const baseKey = await crypto.subtle.importKey(
'raw', enc.encode(passphrase), 'PBKDF2', false, ['deriveKey']);
const key = await crypto.subtle.deriveKey(
{ name: 'PBKDF2', salt, iterations: 600000, hash: 'SHA-256' },
baseKey, { name: 'AES-GCM', length: 256 }, false, ['encrypt']);
const ct = new Uint8Array(await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv }, key, enc.encode(plaintext)));
const packed = new Uint8Array([...salt, ...iv, ...ct]); // salt(16) | iv(12) | ct+tag
return btoa(String.fromCharCode(...packed)); // self-contained Base64
} Belangrijkste functies
Standaard geauthenticeerde GCM-versleuteling
GCM produceert de cijfertekst plus een 128-bit authenticatietag, zodat het ontsleutelen luid mislukt als ook maar één byte is gewijzigd. CBC en CTR zijn één klik verwijderd voor wanneer je ermee moet interopereren.
Zelfstandige cijfertekst
De wachtwoordzin-modus verpakt de willekeurige salt, IV en tag in één Base64-string, zodat wie ontsleutelt alleen de wachtwoordzin nodig heeft — er zijn geen aparte velden om te kopiëren of kwijt te raken.
Wachtwoordzin of ruwe sleutel
Typ een wachtwoordzin (opgerekt met PBKDF2-HMAC-SHA256, 600.000 iteraties) of plak een exacte sleutel van 128/192/256 bit als hex of Base64, met een live byte-teller die de lengte bevestigt.
OpenSSL-compatibele uitvoer
Schakel de OpenSSL-modus in om het Salted__-formaat te produceren dat het enc-commando van OpenSSL en CryptoJS lezen, met het overeenkomende CLI-commando live getoond zodat je het in een terminal kunt reproduceren.
100% in je browser
Elke byte wordt lokaal versleuteld met de Web Crypto API. Open je tabblad Netwerk en je ziet niets de pagina verlaten — het werkt zelfs offline.
Base64- of Hex-uitvoer
Kopieer het resultaat in de codering die je doelsysteem verwacht, en inspecteer de lengtes van salt, IV, cijfertekst en tag in de segment-uitsplitsingsbalk.
Voorbeelden van AES-versleuteling
GCM + wachtwoordzin (zelfstandig, niet-deterministisch)
The quick brown fox jumps over the lazy dog.
salt (16 B) + IV (12 B) + cijfertekst + tag (16 B), Base64-gecodeerd — bij elke run een nieuwe waarde
Met Modus GCM, Sleutelgrootte 256, Sleuteltype Wachtwoordzin en de wachtwoordzin hunter2 wordt deze zin versleuteld tot één zelfstandige Base64-string. Versleutel hem twee keer en je krijgt twee volledig verschillende uitkomsten — dat is opzettelijk. De wachtwoordzin-modus genereert bij elke versleuteling een nieuwe salt van 16 byte en een nieuwe IV van 12 byte, zodat identieke platte tekst nooit dezelfde cijfertekst oplevert en een waarnemer niet kan zien dat twee berichten hetzelfde zijn. De segmentbalk onder de uitvoer toont de exacte indeling: eerst de salt, dan de IV, dan de cijfertekst met de bijbehorende 128-bit GCM-tag erachter. Om te ontsleutelen heeft de ontvanger alleen de wachtwoordzin en dezelfde modus en sleutelgrootte nodig — de salt, IV en tag reizen allemaal mee in de string.
OpenSSL-compatibele uitvoer (CBC + wachtwoordzin)
Attack at dawn!
U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=
Schakel de OpenSSL-compatibele modus in met Modus CBC, Sleuteltype Wachtwoordzin, de wachtwoordzin correct-horse, KDF PBKDF2 en 10.000 iteraties. De tool geeft dan het OpenSSL-formaat Salted__ als uitvoer: Base64 die altijd begint met U2FsdGVkX1, de Base64-codering van de 8-byte Salted__-header. Omdat elke keer een nieuwe willekeurige salt van 8 byte wordt gegenereerd, verandert de exacte string bij elke run, maar elke variant is op de command line te ontsleutelen met: echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -A — wat Attack at dawn! oplevert. Kies EVP-MD5 in plaats van PBKDF2 om overeen te komen met CryptoJS of OpenSSL 1.0.2 en ouder. Let op: openssl enc ondersteunt geen GCM, dus de OpenSSL-modus is alleen CBC.
Tekst versleutelen met AES
- 1
Kies een modus en sleutelgrootte
Laat Modus op GCM (aanbevolen) en Sleutelgrootte op 256 staan voor de sterkste zinvolle standaardinstelling. Schakel alleen over naar CBC of CTR als een systeem waarop je mikt dit vereist.
- 2
Kies wachtwoordzin of ruwe sleutel
Laat Sleuteltype op Wachtwoordzin staan en voer een sterke wachtwoordzin in, of schakel over naar Ruwe sleutel en plak een exacte sleutel van 128/192/256 bit als hex of Base64. De byte-teller bevestigt of je ruwe sleutel een geldige lengte heeft.
- 3
Voer de te versleutelen tekst in
Typ of plak je platte tekst. Versleuteling gebeurt automatisch terwijl je typt, volledig in je browser — geen knop-rondweg en geen upload.
- 4
Kopieer de zelfstandige cijfertekst
Het Base64-resultaat rechts bevat al de salt, IV en authenticatietag. Gebruik de segmentbalk om de byte-indeling te zien en klik dan op Kopiëren. Zet de uitvoercodering op Hex als je doelsysteem dat verwacht.
- 5
Ontsleutel het later terug
Geef de cijfertekst, de wachtwoordzin en dezelfde modus en sleutelgrootte aan de ontvanger, of open de AES-ontsleutelingspagina om het zelf ongedaan te maken.
Veelvoorkomende fouten bij AES-versleuteling
Een wachtwoordzin verwarren met een ruwe sleutel
Een ruwe sleutel moet precies 16, 24 of 32 byte willekeurige data zijn (ingevoerd als hex of Base64); een wachtwoordzin is willekeurige tekst en moet eerst door een KDF worden opgerekt. Als je Ruwe sleutel selecteert en een menselijke wachtwoordzin plakt, geeft dat ofwel een lengtefout ofwel een zwakke sleutel.
Key type: Raw key Key (hex): correct horse battery staple (not hex, not 32 bytes)
Key type: Passphrase Passphrase: correct horse battery staple (stretched with PBKDF2)
Een IV hergebruiken met dezelfde sleutel
De IV moet uniek zijn per bericht onder een gegeven sleutel. Hem hergebruiken is fataal voor GCM (het kan de authenticatiesleutel lekken) en breekt de vertrouwelijkheid voor CBC en CTR. Laat de tool elke keer een nieuwe willekeurige IV genereren.
// same key, same IV for two messages encrypt(key, iv, a); encrypt(key, iv, b);
// fresh random IV each time (the default) encrypt(key, randomIV(), a);
De salt, IV of tag kwijtraken
Als je alleen de cijfertekst-bytes kopieert en de voorafgaande salt/IV — of de aangehangen GCM-tag — weglaat, kan de data nooit worden ontsleuteld. Bewaar de hele zelfstandige string, niet alleen het middenstuk ervan.
stored = ciphertext // salt + IV + tag thrown away
stored = salt + iv + ciphertext + tag // the full Base64 string
Verwachten dat GCM-uitvoer bij elke run overeenkomt
GCM (en de wachtwoordzin-modus in het algemeen) gebruikt een willekeurige salt en IV, dus dezelfde tekst versleutelt elke keer tot een andere Base64-string. Dat is een veiligheidsfunctie, geen bug — het betekent dat een afluisteraar niet kan zien dat twee cijferteksten hetzelfde bericht versleutelen.
assert(encrypt(msg) === encrypt(msg)) // fails — and should
assert(decrypt(encrypt(msg)) === msg) // this is what must hold
Wat je kunt doen met AES-versleuteling
- Leer hoe AES-modi zich gedragen
- Wissel met dezelfde invoer tussen GCM, CBC en CTR om te zien hoe authenticatie, IV-lengte en cijfertekstgrootte veranderen. Een praktische manier om te begrijpen wat NIST SP 800-38D daadwerkelijk voorschrijft.
- Produceer cijfertekst die een ander systeem kan lezen
- Genereer uitvoer in het OpenSSL-formaat Salted__ (of als ruwe sleutel plus IV), zodat een backend, script of collega die openssl of een cryptobibliotheek gebruikt het zonder wrijving kan ontsleutelen.
- Versleutel een korte notitie of snippet
- Bescherm een eenmalig stukje persoonlijke tekst — een herstelzin die je tussen apparaten verplaatst, een snippet in een supportticket — met een wachtwoordzin die alleen jij kent. Niet voor gereguleerde of productiegeheimen.
- Prototype een versleutelingsformaat
- Leg hier je indeling van salt/IV/tag en je KDF-instellingen vast voordat je de code schrijft, met behulp van de segment-uitsplitsing om bytevolgorde en -lengtes te bevestigen.
- Genereer testvectoren
- Maak bekende cijfertekst met een vaste wachtwoordzin en modus om je eigen ontsleutelingstests te voeden, en verifieer daarna de round-trip op de AES-ontsleutelingspagina.
AES-modi & sleutelafleiding
- GCM (Galois/Counter Mode) — geauthenticeerd, aanbevolen
- Vertrouwelijkheid plus een 128-bit authenticatietag (NIST SP 800-38D). Het gebruikt een IV van 96 bit (12 byte), willekeurig gegenereerd per versleuteling, en zowel versleutelen als ontsleutelen parallelliseren goed. De ene regel die je nooit mag breken: hergebruik nooit een IV met dezelfde sleutel. SP 800-38D beperkt één sleutel tot ongeveer 2^32 willekeurig gegenereerde IV's, en een herhaling lekt de XOR van twee platte teksten en kan zelfs de authenticatiesleutel blootleggen die de tag beschermt. Het beste voor bijna alles.
- CBC (Cipher Block Chaining) — alleen vertrouwelijkheid
- Elk blok wordt ge-XOR'd met het vorige cijfertekstblok, met een willekeurige IV van 16 byte. Het heeft geen ingebouwde authenticatie, dus het moet worden gecombineerd met een aparte MAC — encrypt-then-MAC, bijvoorbeeld met onze HMAC-generator — en het is van oudsher gevoelig voor padding-oracle-aanvallen (Vaudenay, EUROCRYPT 2002). Hier aangeboden voor interoperabiliteit met OpenSSL en oudere systemen.
- CTR (Counter) — alleen vertrouwelijkheid, streamachtig
- Verandert AES in een streamcijfer door een teller te versleutelen, zodat elke bytelengte werkt zonder padding en blokken vrij parallelliseren. Net als CBC biedt het op zichzelf geen integriteit, en het hergebruiken van de teller/IV onder één sleutel is catastrofaal. Nuttig wanneer je willekeurige toegang of streaming-semantiek nodig hebt.
- ECB — niet aangeboden (met opzet)
- Electronic Codebook versleutelt elk blok onafhankelijk, zodat identieke blokken platte tekst identieke cijfertekst opleveren en patronen lekken — de beruchte 'ECB-pinguïn'. De Web Crypto API implementeert het bewust niet, en wij ook niet. Als een verouderd systeem ECB vereist, zie dat dan als een bug om te repareren in plaats van een formaat om te reproduceren.
- Sleutelafleiding: 600.000 vs. 10.000 vs. 1 iteratie
- In de standaard wachtwoordzin-modus gebruikt deze tool PBKDF2-HMAC-SHA256 bij 600.000 iteraties (dezelfde SHA-256-hash honderdduizenden keren toegepast) met een salt van 16 byte, volgens OWASP. In de OpenSSL-compatibele modus gebruikt PBKDF2 standaard slechts 10.000 iteraties (de standaard van openssl enc), en de verouderde KDF EVP_BytesToKey die CryptoJS en oud OpenSSL gebruiken, voert één enkele MD5-pas uit — ordes van grootte zwakker. Meer iteraties betekenen een trager brute-force per gok, wat de reden is waarom de moderne standaard zoveel hoger ligt. Argon2 en scrypt zijn nog sterker, maar maken geen deel uit van Web Crypto en vallen hier dus buiten scope; volg voor wachtwoordopslag OWASP en geef de voorkeur aan Argon2id.
Best practices voor AES-versleuteling
- Geef de voorkeur aan GCM, tenzij een tegenpartij iets anders vereist
- Geauthenticeerde versleuteling vangt manipulatie op die CBC en CTR stilzwijgend doorlaten. Schakel alleen naar CBC of CTR voor interoperabiliteit, en voeg in dat geval een MAC toe.
- Gebruik voor elk bericht een nieuwe willekeurige IV
- De tool doet dit automatisch. Als je de IV handmatig overschrijft, hergebruik er dan nooit een met dezelfde sleutel — bij GCM is een herhaling catastrofaal, en bij CBC breekt het de semantische veiligheid.
- Kies sterke wachtwoordzinnen en echte willekeurige sleutels
- PBKDF2 vertraagt brute force maar kan een zwakke wachtwoordzin niet redden. Genereer een lange wachtwoordzin met de wachtwoordgenerator, of een echte willekeurige sleutel met de geheime-sleutelgenerator.
- Bewaar de salt, IV en tag bij de cijfertekst
- Ze zijn niet geheim, maar zonder hen mislukt het ontsleutelen. Het zelfstandige formaat van deze tool bundelt alle drie; als je de modus met ruwe sleutel en kale cijfertekst gebruikt, kopieer de IV dan apart en bewaar hem samen met de cijfertekst.
- Versleutel geen productie- of gereguleerde geheimen in enige online tool
- Zelfs volledig client-side is een browser-tool bedoeld voor leren, debuggen en persoonlijke eenmalige gevallen. Echte geheimen horen thuis in een gecontroleerd sleutelbeheersysteem met geauditeerde sleutelverwerking en -rotatie. AES-256 zelf is sterk — goedgekeurd onder de CNSA 2.0-suite van de NSA voor informatie tot en met TOP SECRET — en echte inbreuken ontstaan door implementatiefouten, niet door het cijfer.
Veelgestelde vragen over AES-versleuteling
Is het veilig om tekst online te versleutelen?
Kan AES zonder de sleutel worden ontsleuteld?
GCM versus CBC — welke modus moet ik gebruiken?
AES-128 versus AES-256 — is 256 de moeite waard?
Wordt mijn data geüpload wanneer ik hier versleutel?
Wat is het verschil tussen een wachtwoordzin en een sleutel?
Kan ik zo versleutelen dat OpenSSL of CryptoJS het kan ontsleutelen?
Gerelateerde tools
Alle tools bekijken →AES-ontsleutelingstool — OpenSSL- & CryptoJS-compatibel
Beveiligingstools
Ontsleutel AES online — GCM/CBC/CTR, wachtwoordzin of ruwe sleutel, detecteert automatisch het OpenSSL- & CryptoJS-formaat "U2FsdGVkX1". 100% in de browser, sleutels verlaten de pagina nooit.
Bcrypt-hashgenerator & -verifier
Beveiligingstools
Genereer en verifieer bcrypt-wachtwoordhashes online — instelbare kostenfactor, $2b$/$2a$/$2y$-prefixes. 100% in je browser; je wachtwoord wordt nooit geüpload.
HMAC-generator en handtekeningverificatie
Beveiligingstools
Gratis online HMAC-generator en -verificator. Bereken HMAC-SHA256/SHA1/SHA384/SHA512 met sleutels in Tekst, Hex of Base64 en Hex/Base64/Base64URL-uitvoer. 100% in je browser — sleutels verlaten nooit de pagina.
JWT decoderen — online JWT-decoder
Beveiligingstools
Decodeer JWT-tokens direct in je browser. Inspecteer header, payload, signature, vervaldatum en claims. 100% privé — je token verlaat je apparaat nooit.
JWT-encoder & generator
Beveiligingstools
Gratis online JWT-generator & encoder. Bouw de header en payload en onderteken direct met HS256, RS256 of ES256. 100% in de browser — je secret en sleutel verlaten je apparaat nooit.
Gratis JWT-secretgenerator — HS256/384/512
Beveiligingstools
Genereer een sterk, RFC-correct JWT-secret voor HS256/384/512 — 100% in je browser, nooit naar een server gestuurd. base64url, base64 of hex; kopieer voor .env.