AES-kryptering / -dekryptering — GCM, CBC, CTR och ECB i webbläsaren
AES-kryptering / -dekryptering
Krypterar eller dekrypterar med AES-128, AES-192 eller AES-256 (FIPS 197) i läget GCM (autentiserad kryptering), CBC, CTR eller ECB. Nycklar är rå hex- eller Base64-byte, eller härleds från ett lösenord med PBKDF2-HMAC-SHA256. GCM stöder AAD och visar autentiseringstaggen separat; CBC/CTR/ECB-utdata är kompatibla med OpenSSL enc. För hashar se Hashgeneratorn, för nyckelade MAC-koder HMAC-generatorn och för äldre chiffer sidan Legacy Ciphers i samma familj. Körs helt lokalt — nycklar och klartext lämnar aldrig fliken. Filer upp till 200 MB.
Allt som skrivs här stannar i fliken — men det är inte samma sak som “säkert för produktionshemligheter”. Webbläsarens minne, tillägg och personer som tittar över axeln ser det som klistras in. Sidan används för att lära, verifiera och testa interoperabilitet, inte för att hantera kunddata i drift.
Riktning:Läge:Utdata:
GCM = AES-GCM med en 12-byte nonce och en 128-bitars autentiseringstagg (AEAD: konfidentialitet + integritet). Standard när säkerhet är målet.
Nyckel(råa byte: 16, 24 eller 32 byte = AES-128/192/256; längden på det inklistrade avgör)
Hex tål mellanslag, kolon och prefixet 0x.
Salt (hex, 8–16 byte):
Iterationer:Nyckelstorlek:
Saltet följer med chiffertexten — den som dekrypterar behöver samma lösenord, salt, iterationsantal och nyckelstorlek. OWASP rekommenderar minst 600 000 iterationer av PBKDF2-HMAC-SHA256.
IV / nonce(GCM: 12 byte; CBC/CTR: 16 byte — hex)
Återanvänd aldrig en nonce under samma nyckel i GCM eller CTR.
AAD(ytterligare autentiserad data — autentiserad men inte krypterad, valfritt)
Taggens längd:
Autentiseringstagg(hex, så som sidan skriver ut den vid kryptering — krävs för dekryptering)
Plaintext text (the data to encrypt, UTF-8 encoded)
Välj en fil eller dra och släpp den här Filen läses lokalt i bitar om 8 MB; inget laddas upp. Upp till 200 MB.
Ciphertext (en rad: läge, nyckelstorlek, värde; parametrar på raderna nedan)
Parameterraderna registrerar den exakta nyckeltolkningen, IV, AAD-storlek och tagg, så att ett kopierat resultat alltid kan återskapas på en annan maskin.
Vilket läge bör väljas? GCM är standardsvaret: det krypterar och autentiserar — taggraden gör manipulation synlig (prova att dekryptera med en vänd taggbyte så vägrar sidan). CBC döljer blockmönster men ger ingen integritet; kombinera det med en HMAC (se HMAC-generatorn) om det måste användas. CTR gör AES till ett strömchiffer — ingen utfyllnad, men en återanvänd nonce under samma nyckel är katastrofal i både CTR och GCM. ECB finns här enbart för kompatibilitet och undervisning: identiska klartextblock krypteras till identiska chiffertextblock (den berömda ECB-pingvinen).
OpenSSL-interoperabilitet — CBC- och CTR-utdata från den här sidan (PKCS#7-utfyllnad, rå nyckel) går att använda med kommandoraden openssl enc: openssl enc -aes-256-cbc -K <64-hex-nyckel> -iv <32-hex-iv> -in msg.txt -out msg.enc openssl enc -d -aes-256-cbc -K <nyckel> -iv <iv> -in msg.enc -out msg.txt Samma sak fungerar med -aes-128-cbc, -aes-192-cbc, -aes-256-ctr (16-byte IV = initialt räknarblock). Observera att openssl encinte stöder GCM — använd den här sidan, eller openssl aesgcm från OpenSSL 3.3+, för autentiserad kryptering.
Behövs i stället den kinesiska nationella chiffret? SM4 (GB/T 32907-2016) — blockchiffret som föreskrivs i kinesisk kommersiell kryptografi, med samma 128-bitars block och nyckelstorlek som AES men med eget nyckelschema och egen S-box — finns på en egen sida i lägena ECB och CBC: SM4-kryptering / -dekryptering. Resten av SM-sviten finns där också: SM3 (hash), SM2 (publik nyckel) och SM9 (identitetsbaserad kryptografi).
Självtest Kör sidans motorer mot oberoende referensvärden: testvektorer med känt svar för alla fyra lägena (framtagna av en oberoende nativ implementering), GCM-taggvektorer med och utan AAD, korskontroller av WebCrypto-motorn mot den rena JS-AES-motorn, GCM-tur-och-retur och negativa tester (en manipulerad tagg eller fel nyckel ska misslyckas). Inget skickas någonstans.
AES-kryptering förklarad från grunden
Kort sagt: AES är det världsomspännande standardchiffret för block — det blandar om 16-byteblock under en nyckel på 128, 192 eller 256 bitar — och läget där det körs (GCM, CBC, CTR, ECB) avgör hur blocken kedjas, vad IV:n används till och om manipulation kan upptäckas. Välj GCM om det inte finns en särskild anledning att inte göra det.
Vad AES i sig är (FIPS 197)
Blockchiffret. AES (Rijndael-konstruktionen, standardiserad av NIST 2001 som FIPS 197) krypterar exakt 16 byte åt gången. Nyckellängden — 16, 24 eller 32 byte — väljer AES-128, -192 eller -256 och antalet interna rundor (10, 12, 14). Varje runda blandar blocket med rundnycklar som härletts ur nyckeln genom substitutionstabeller, radförskjutningar och kolumnblandning. Ingen praktisk attack bryter själva chiffret: de verkliga felen är nästan alltid läges-, IV- eller nyckelhanteringsmisstag, vilket resten av sidan handlar om.
Varför alls ett läge? För att meddelanden sällan är 16 byte. Läget limmar ihop blockkrypteringarna: ECB krypterar bara block var för sig; CBC XOR:ar varje block med föregående chiffertext; CTR krypterar en räknare och XOR:ar den med data som ett strömchiffer; GCM bygger på CTR och lägger till en autentiseringstagg. AES förblir detsamma — läget ändrar allt om vilka garantier man får.
Nycklar och lösenord. En AES-nyckel är 16, 24 eller 32 slumpmässiga byte. Ett lösenord skrivet av en människa är inte det: sidans lösenordsalternativ härleder en korrekt nyckel med PBKDF2-HMAC-SHA256 (600 000 iterationer som standard, OWASP 2023 som grund — se HMAC-generatorn för detaljer om KDF). Använd aldrig en lösenordssträng direkt som AES-nyckel: dess entropi är en liten del av längden.
De fyra lägena jämförda
Läge
IV / nonce
Integritet
Anteckningar
GCM
12 byte, unik per meddelande
Ja — 96–128-bitars tagg
AEAD: den rekommenderade standarden överallt (TLS 1.3, SSH, filformat). Accepterar även AAD.
CBC
16 byte, oförutsägbar
Nej
PKCS#7-utfyllnad; klassiskt men kräver en MAC bredvid. Utfyllnadsorakelfel är den klassiska CBC-fallgropen.
CTR
16-byte initial räknare
Nej
Ingen utfyllnad, strömliknande, direktåtkomst; återanvänd nonce under en nyckel läcker klartext XOR klartext.
ECB
ingen
Nej
Identiska block → identisk chiffertext. Pingvindemonstrationen för ECB. Endast för kompatibilitet.
IV-regler i ett stycke. IV:n är inte hemlig — skicka den tillsammans med chiffertexten — men dess unikhetskrav skiljer sig: CBC kräver en oförutsägbar IV; GCM och CTR kräver bara att samma nonce aldrig återanvänds med samma nyckel (återanvändning av nonce i GCM är värre: den läcker autentiseringsnyckeln). Sidans knapp för slumpmässig IV använder webbläsarens säkra slumpgenerator; knappen för alla nollor finns för att återskapa testvektorer, inte för riktiga meddelanden.
Utfyllnad. CBC och ECB behöver hela block, så PKCS#7-utfyllnad lägger till 1 till 16 byte, var och en lika med utfyllnadens längd. Därför växer CBC-chiffertexter med upp till 16 byte, och därför misslyckas dekryptering med fel nyckel oftast med ett utfyllnadsfel. CTR och GCM är strömliknande och behöver ingen utfyllnad — chiffertextens längd är exakt lika med klartextens (prova exemplet i CTR-läget: 43 byte in, 43 byte ut).
CFB och OFB (de två återstående klassiska lägena) finns inte på den här sidan: de är strömliknande som CTR men utan fördel jämfört med den, och lever mest kvar i gamla protokoll.
Vad GCM tillför (AEAD, taggar, AAD)
Autentiserad kryptering. GCM = CTR-kryptering + en GHASH-autentiserare över chiffertexten, IV:n och AAD. Utdatataggen är ett fingeravtryck av allt: ändras en enda bit i chiffertexten, IV:n eller AAD stämmer inte taggen längre, så mottagaren kan bevisa att meddelandet är intakt och kommer från en nyckelinnehavare. CBC+HMAC uppnår samma sak först om man sätter ihop det rätt (encrypt-then-MAC) — GCM gör det rätt i konstruktionen.
AAD. Ytterligare autentiserad data skickas i klartext men täcks av taggen: protokollhuvuden, filnamn, algoritmidentifierare. Mottagaren måste ange identiska AAD-byte, annars misslyckas taggkontrollen — det är själva poängen.
Taggens längd. Den förvalda 128-bitarstaggen är rekommendationen; kortare taggar (96–120 bitar) byter förfalskningsmotstånd mot storlek. Under 96 bitar försämras GCM:s säkerhetsbevis snabbt, varför sidan stannar där.
Nonce-katastrofen. Att återanvända en 12-byte GCM-nonce under samma nyckel läcker XOR:en av klartexterna i de två meddelandena och autentiseringsundernyckeln — därefter går det att förfalska alla framtida meddelanden under den nyckeln. System som inte kan garantera unikhet använder varianter som tål felanvändning av nonce (AES-GCM-SIV, RFC 8452).
Ankarvärden — återskapa dem på den här sidan
Den första raden är det klassiska enblocksexemplet från FIPS 197; resten har tagits fram av en oberoende nativ implementering (OpenSSL via Node.js) och verifierats på nytt med sidans egna motorer. Klistra in nyckeln, IV:n och indatan på sidan för att återskapa varje rad.
Fall
Indata
Förväntad utdata
AES-128 enblock (i FIPS 197-stil)
key 000102..0f, plaintext 00112233..ff
69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCM
key 000102..0f, IV 606162..6b, plaintext 0011..ef ×2
ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, samma men med AAD deadbeef
key 000102..1f
ct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBC
key 000102..1f, IV 101112..1f, plaintext 0011..ef ×2
Att använda ECB eftersom det inte behöver någon IV. Bekvämligheten är fällan: blockmönster läcker rakt in i chiffertexten (krypterar man en bitmapp syns bilden fortfarande). ECB är acceptabelt bara för enstaka block eller exakt 16-byte slumpmässiga nycklar — i praktiken aldrig av eget val.
Återanvändning av nonce/IV. Med GCM eller CTR under samma nyckel är det det enda misstag som bryter allt på en gång. Räknarbaserade system (sidans knapp för slumpmässig IV) finns för att göra det omöjligt.
Att behandla IV:n som hemlig. Det är den inte. Lagra eller skicka den tillsammans med chiffertexten. Att gömma den ger ingenting och lockar till återanvändning.
Att använda ett lösenord som nyckel."hunter2hunter2hunter2hunter2" är 32 byte men inte 256 bitar entropi — det är ett ordboksord med utfyllnad. Härled med PBKDF2 (inbyggt på sidan) eller generera en slumpmässig nyckel.
Att anta att CBC upptäcker manipulation. Vänder man en bit i CBC-chiffertexten lyckas dekrypteringen tyst med skadad klartext. Endast GCM:s tagg (eller en explicit HMAC) gör manipulation synlig.
Att jämföra GCM-chiffertexter för likhet. Med slumpmässiga nonces krypteras samma klartext olika varje gång — det är en egenskap. Deterministisk kryptering är ett annat, specialiserat verktyg.
Vanliga frågor
Är AES-128 fortfarande säkert, eller behövs 256? Båda är säkra mot realistiska angripare; de bästa kända attackerna minskar marginalen bara obetydligt. AES-256 är främst viktigt för långsiktiga hemligheter och för framtida kvantdatorer (Grovers algoritm halverar nyckelstyrkan, vilket lämnar AES-256 på ungefär 128-bitars motsvarighet).
Varför kan inte openssl enc göra GCM? Kommandot enc är äldre än AEAD och saknar sätt att bära en tagg; OpenSSL 3.3 lade i stället till ett särskilt kommando, aesgcm. GCM-utdata på den här sidan håller taggen på en egen rad, så att båda kan flyttas explicit.
Vad är nyckelinpackning (AES-KW)? Ett specialiserat läge för att kryptera andra nycklar i fasta 64-bitarsblock med en egen integritetskontroll. Det erbjuds inte här, eftersom indata och utdata är nyckelformade, inte meddelandeformade — felanvändning är normen.
Varför är min CTR-chiffertext lika lång som klartexten, men CBC:s längre? CTR och GCM är strömliknande (ingen utfyllnad); CBC/ECB fyller ut till ett helt 16-byteblock med PKCS#7. Längdskillnaden är avsiktlig och inget fel.
Kan jag dekryptera något som krypterats någon annanstans? Ja, om läget, nyckeln och IV:n (och för GCM även taggen) är exakt kända. Utdatarader på den här sidan registrerar alla dessa precis, så att parametrar kan flyttas mellan verktyg — OpenSSL-rutan ovan visar motsvarande kommandoraderna.