AES-versleuteling / -ontsleuteling

Versleutel of ontsleutel met AES-128, AES-192 of AES-256 (FIPS 197) in GCM (geauthenticeerde versleuteling), CBC, CTR of ECB-modus. Sleutels zijn ruwe hex- of Base64-bytes, of worden met een wachtwoord afgeleid via PBKDF2-HMAC-SHA256. GCM ondersteunt AAD en toont de authenticatietag apart; CBC-, CTR- en ECB-uitvoer is compatibel met het OpenSSL-commando enc. Voor hashes zie de Hashgenerator, voor gesleutelde MAC's de HMAC-generator, voor verouderde cijfers de pagina Verouderde cijfers in deze reeks.
Draait volledig lokaal — sleutels en platte tekst verlaten uw tabblad nooit. Bestanden tot 200 MB.
Alles wat hier wordt ingetypt, blijft in dit tabblad — maar dat is niet hetzelfde als “veilig voor productiegeheimen.” Browsergeheugen, extensies en meekijkers zien wat u plakt. Gebruik deze pagina om te leren, te controleren en te laten samenwerken, niet om live klantgegevens te verwerken.
Richting: Modus: Uitvoer:
GCM = AES-GCM met een nonce van 12 bytes en een authenticatietag van 128 bit (AEAD: vertrouwelijkheid + integriteit). Standaard wanneer beveiliging het doel is.
Hex accepteert spaties, dubbele punten en 0x-voorvoegsels.
Gebruik nooit een nonce opnieuw met dezelfde sleutel bij GCM of CTR.
Taglengte:
De parameterregels leggen de exacte sleutelinterpretatie, IV, AAD-grootte en tag vast, zodat een gekopieerd resultaat altijd op een andere machine te reproduceren is.
Welke modus kies ik?
GCM is het standaardantwoord: het versleutelt en authenticeert — de taglijn maakt manipulatie zichtbaar (probeer te ontsleutelen met een omgedraaide tagbyte en de pagina weigert). CBC verbergt blokpatronen maar biedt geen integriteit; combineer het met een HMAC (zie de HMAC-generator) als u het moet gebruiken. CTR maakt van AES een stroomcijfer — geen opvulling, maar een hergebruikte nonce onder dezelfde sleutel is in zowel CTR als GCM catastrofaal. ECB staat hier alleen voor compatibiliteit en onderwijs: identieke platte-tekstblokken worden tot identieke ciphertekstblokken (de bekende ECB-pinguïn).
OpenSSL-interoperabiliteit — CBC- en CTR-uitvoer van deze pagina (PKCS#7-opvulling, ruwe sleutel) doorloopt de heen-en-weer-route met het commando openssl enc:
openssl enc -aes-256-cbc -K <64-hex-sleutel> -iv <32-hex-iv> -in msg.txt -out msg.enc
openssl enc -d -aes-256-cbc -K <sleutel> -iv <iv> -in msg.enc -out msg.txt
Hetzelfde werkt met -aes-128-cbc, -aes-192-cbc, -aes-256-ctr (16-byte IV = initiële tellerblok). Let op: openssl enc ondersteunt geen GCM — gebruik deze pagina, of openssl aesgcm vanaf OpenSSL 3.3+, voor geauthenticeerde versleuteling.
Hebt u liever het Chinese nationale cijfer?
SM4 (GB/T 32907-2016) — het blokcijfer dat in de Chinese commerciële cryptografie verplicht is, met dezelfde 128-bit blokgrootte en sleutelgrootte als AES, maar met een eigen sleutelschema en S-box — draait op een eigen pagina in ECB- en CBC-modus: SM4 versleutelen / ontsleutelen. De rest van de SM-reeks staat daar ook: SM3 (hash), SM2 (publieke sleutel) en SM9 (identiteitsgebaseerde cryptografie).
Zelftest
Voert de engines van de pagina uit tegen onafhankelijke ankers: bekende-antwoordvectoren voor alle vier modi (gegenereerd door een onafhankelijke native implementatie), GCM-tagvectoren met en zonder AAD, kruiscontroles van de WebCrypto-engine tegen de pure-JS AES-engine, GCM-heen-en-terug en negatieve tests (een gemanipuleerde tag en een verkeerde sleutel moeten falen). Er wordt niets ergens naartoe gestuurd.
AES-versleuteling van nul uitgelegd
In één zin: AES is het wereldwijd gestandaardiseerde blokcijfer — het versleutelt blokken van 16 bytes onder een sleutel van 128, 192 of 256 bit — en de modus waarin u het draait (GCM, CBC, CTR, ECB) bepaalt hoe die blokken aan elkaar worden gekoppeld, waarvoor de IV dient en of manipulatie zichtbaar is; kies GCM tenzij u een reden hebt om dat niet te doen.
Wat AES zelf is (FIPS 197)

Het blokcijfer. AES (het Rijndael-ontwerp, in 2001 door NIST gestandaardiseerd als FIPS 197) versleutelt precies 16 bytes tegelijk. Uw sleutellengte — 16, 24 of 32 bytes — kiest AES-128, -192 of -256 en het aantal interne rondes (10, 12, 14). Elke ronde mengt het blok met rondesleutels die uit uw sleutel zijn afgeleid, via substitutietabellen, rijverschuivingen en kolommenmenging. Geen praktische aanval breekt het cijfer zelf: de echte fouten zitten bijna altijd in modus-, IV- of sleutelbeheer, en daar gaat de rest van deze pagina over.

Waarom überhaupt een modus? Omdat berichten zelden 16 bytes zijn. De modus koppelt blokversleutelingen aan elkaar: ECB versleutelt blokken onafhankelijk; CBC voegt elk blok via XOR samen met de vorige ciphertekst; CTR versleutelt een teller en voegt die via XOR toe aan de data als een stroomcijfer; GCM bouwt op CTR voort en voegt een authenticatietag toe. AES blijft hetzelfde — de modus verandert alles aan de garanties die u krijgt.

Sleutels en wachtwoorden. Een AES-sleutel is 16, 24 of 32 willekeurige bytes. Een menselijk wachtwoord is dat niet: de optie Wachtwoord op deze pagina leidt een goede sleutel af met PBKDF2-HMAC-SHA256 (standaard 600.000 iteraties, de OWASP-basislijn van 2023 — zie de HMAC-generator voor de details van de KDF). Gebruik nooit een wachtwoordtekst rechtstreeks als AES-sleutel: de entropie ervan is maar een klein deel van de lengte.

De vier modi vergeleken
ModusIV / nonceIntegriteitOpmerkingen
GCM12 bytes, uniek per berichtJa — tag van 96 tot 128 bitAEAD: overal de aanbevolen standaard (TLS 1.3, SSH, bestandsformaten). Accepteert ook AAD.
CBC16 bytes, onvoorspelbaarNeePKCS#7-opvulling; klassiek, maar heeft een MAC naast zich nodig. Opvulorakelfouten zijn de klassieke CBC-valkuil.
CTRInitiële teller van 16 bytesNeeGeen opvulling, stroomachtig, willekeurige toegang; nonce-hergebruik onder één sleutel lekt de XOR van platte tekst.
ECBgeenNeeIdentieke blokken → identieke ciphertekst. De ECB-pinguïndemonstratie. Alleen voor compatibiliteit.

IV-regels in één alinea. De IV is geen geheim — verstuur hem naast de ciphertekst — maar de eis aan zijn uniciteit verschilt: CBC wil een onvoorspelbare IV; GCM en CTR eisen alleen dat dezelfde nonce nooit met dezelfde sleutel wordt hergebruikt (hergebruik van een GCM-nonce is erger: het lekt de authenticatiesleutel). De knop Willekeurige IV op deze pagina gebruikt de veilige RNG van de browser; de knop Alle nullen bestaat om testvectoren te reproduceren, niet voor echte berichten.

Opvulling. CBC en ECB hebben hele blokken nodig, dus PKCS#7-opvulling voegt 1 tot 16 bytes toe, elk gelijk aan de opvullengte. Daarom groeien CBC-ciphertekst tot 16 bytes en mislukt ontsleutelen met de verkeerde sleutel meestal met een opvulfout. CTR en GCM werken als stroomcijfers en hebben geen opvulling nodig — de lengte van de ciphertekst is precies gelijk aan die van de platte tekst (probeer het voorbeeld in CTR-modus: 43 bytes erin, 43 bytes eruit).

CFB en OFB (de twee overige klassieke modi) zijn op deze pagina niet geïmplementeerd: ze werken als stroomcijfers zoals CTR, maar bieden er geen voordeel boven, en leven vooral voort in oude protocollen.

Wat GCM toevoegt (AEAD, tags, AAD)

Geauthenticeerde versleuteling. GCM = CTR-versleuteling + een GHASH-authenticator over de ciphertekst, de IV en de AAD. De uitvoertag is een vingerafdruk van alles: verander één bit van ciphertekst, IV of AAD en de tag klopt niet meer, zodat de ontvanger kan bewijzen dat het bericht intact is en van een sleutelhouder komt. CBC+HMAC bereikt hetzelfde alleen als u het correct samenstelt (encrypt-then-MAC) — GCM is dat per constructie al.

AAD. Aanvullende geauthenticeerde gegevens reizen onversleuteld mee, maar vallen wel onder de tag: protocolkoppen, bestandsnamen, algoritme-identificaties. De ontvanger moet exact dezelfde AAD-bytes aanleveren, anders faalt de tagcontrole — dat is het doel.

Taglengte. De standaard tag van 128 bit is de aanbeveling; kortere tags (96 tot 120 bit) ruilen vervalsingsbestendigheid in voor omvang. Onder 96 bit verslechteren de veiligheidsbewijzen van GCM snel, en daarom stopt deze pagina daar.

De nonce-catastrofe. Een 12-byte GCM-nonce onder dezelfde sleutel hergebruiken lekt de XOR van de twee platte teksten en de authenticatie-subsleutel — waarna vervalsingen mogelijk zijn voor alle toekomstige berichten onder die sleutel. Systemen die uniciteit niet kunnen garanderen, gebruiken varianten die bestand zijn tegen nonce-misbruik (AES-GCM-SIV, RFC 8452).

Ankerwaarden — reproduceer ze op deze pagina

De eerste rij is het bekende enkelblok-voorbeeld uit FIPS 197; de overige zijn gegenereerd door een onafhankelijke native implementatie (OpenSSL via Node.js) en op de engines van deze pagina opnieuw gecontroleerd. Plak de sleutel, IV en invoer in de pagina om elke regel te reproduceren.

HoofdlettersInvoerVerwachte uitvoer
AES-128 enkel blok (FIPS 197-stijl)key 000102..0f, plaintext 00112233..ff69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCMkey 000102..0f, IV 606162..6b, plaintext 0011..ef ×2ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, hetzelfde maar met AAD deadbeefkey 000102..1fct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBCkey 000102..1f, IV 101112..1f, plaintext 0011..ef ×20e2392dd6f690b44a5a1b4fdff3b7f83cb9ab59d9900119cc5f83e062d95fb643b1a94b514ea2f3b95f84c900b5c98a8
AES-256-CTR (dezelfde invoer als CBC hierboven)43-byte plaintext → 43-byte ciphertexte9d2cdb9f661359178ed366dfa3a4671f8e20efd723f090eb7d1d524d480fd3c
Veelgemaakte fouten
  • ECB gebruiken omdat het geen IV nodig heeft. Het gemak is de valkuil: blokpatronen lekken direct door in de ciphertekst (versleutel een bitmap en u ziet nog steeds het beeld). ECB is alleen acceptabel voor enkele blokken of precies 16 bytes willekeurige sleutels — in de praktijk nooit bewust gekozen.
  • Een nonce/IV hergebruiken. Met GCM of CTR onder één sleutel is dit de ene fout die alles tegelijk breekt. Teller-gebaseerde systemen (de knop Willekeurige IV op deze pagina) bestaan om dit onmogelijk te maken.
  • De IV als geheim behandelen. Dat is hij niet. Sla hem op of verstuur hem naast de ciphertekst. Verbergen levert niets op en verleidt tot hergebruik.
  • Een wachtwoord als sleutel gebruiken. "hunter2hunter2hunter2hunter2" is 32 bytes, maar niet 256 bit aan entropie — het is een woordenboekwoord met opvulling. Leid af met PBKDF2 (ingebouwd in deze pagina) of genereer een willekeurige sleutel.
  • Aannemen dat CBC manipulatie detecteert. Draai één bit om in een CBC-ciphertekst en het ontsleutelen “slaagt” met stilletjes beschadigde platte tekst. Alleen de GCM-tag (of een expliciete HMAC) maakt manipulatie zichtbaar.
  • GCM-ciphertekst op gelijkheid vergelijken. Bij willekeurige nonces wordt dezelfde platte tekst elke keer anders versleuteld — dat is een kenmerk. Deterministische versleuteling is een ander, gespecialiseerd hulpmiddel.
Veelgestelde vragen

Is AES-128 nog veilig, of hebt u 256 nodig? Beide zijn veilig tegen realistische aanvallers; de beste bekende aanvallen verkleinen de marge slechts een fractie. AES-256 is vooral belangrijk voor langetermijngeheimen en post-kwantumzekerheid (het algoritme van Grover halveert de sleuteldsterkte, waardoor AES-256 neerkomt op ongeveer 128 bit).

Waarom ondersteunt openssl enc geen GCM? Het commando enc dateert van vóór AEAD en kan geen tag meedragen; OpenSSL 3.3 voegde daarom het aparte commando aesgcm toe. De GCM-uitvoer van deze pagina zet de tag op een eigen regel, zodat u beide expliciet kunt verplaatsen.

Wat is sleutelverpakking (AES-KW)? Een gespecialiseerde modus om andere sleutels te versleutelen met vaste blokken van 64 bit en een eigen integriteitscontrole. Deze pagina biedt die niet aan, omdat de invoer en uitvoer sleutelvormig zijn en niet berichtvormig — misbruik is de norm.

Waarom is mijn CTR-ciphertekst even lang als de platte tekst, maar die van CBC langer? CTR en GCM werken als stroomcijfers (geen opvulling); CBC/ECB vullen tot een heel blok van 16 bytes met PKCS#7 op. Het lengteverschil is ontworpen gedrag, geen fout.

Kan ik iets ontsleutelen dat elders is versleuteld? Ja, als u de exacte modus, sleutel, IV (en bij GCM de tag) kent. De uitvoerregels van deze pagina leggen al die gegevens precies vast, zodat u parameters tussen tools kunt overnemen — het OpenSSL-kader hierboven toont de bijbehorende commando's.