Šifrování a dešifrování AES

Šifrujte nebo dešifrujte pomocí AES-128, AES-192 nebo AES-256 (FIPS 197) v režimu GCM (autentizované šifrování), CBC, CTR nebo ECB. Klíče jsou zadávány jako surový hex nebo bajty Base64, případně odvozeny z hesla pomocí PBKDF2-HMAC-SHA256. GCM podporuje AAD a značku zobrazuje zvlášť; výstupy CBC/CTR/ECB jsou kompatibilní s openssl enc. Pro hashe použijte generátor hashů, pro klíčované MAC generátor HMAC, pro starší šifry stránku Legacy Ciphers v této rodině.
Běží zcela lokálně — klíče a otevřený text neopouštějí kartu prohlížeče. Soubory až 200 MB.
Vše, co zde zadáte, zůstane v této kartě — ale to neznamená „bezpečné pro produkční tajemství“. Paměť prohlížeče, rozšíření a kolemstojící vidí, co vložíte. Tuto stránku používejte k učení, ověřování a spolupráci mezi nástroji, ne ke zpracování živých zákaznických dat.
Směr: Režim: Výstup:
GCM = AES-GCM s 12bajtovým nonce a 128bitovou autentizační značkou (AEAD: důvěrnost + integrita). Výchozí volba, pokud jde o bezpečnost.
Hex toleruje mezery, dvojtečky a předpony 0x.
V režimu GCM nebo CTR nikdy nepoužívejte stejný nonce se stejným klíčem.
Délka značky:
Řádky s parametry zaznamenávají přesné čtení klíče, IV, velikost AAD a značku, takže výsledek zkopírovaný z jednoho počítače lze vždy zreprodukovat na jiném.
Který režim zvolit?
GCM je výchozí volba: šifruje a ověřuje — řádek se značkou umožňuje zjistit neoprávněnou změnu (zkuste dešifrovat s jedním převráceným bajtem značky a stránka odmítne). CBC skrývá vzory bloků, ale nenabízí integritu; pokud jej musíte použít, kombinujte jej s HMAC (viz generátor HMAC). CTR mění AES na proudovou šifru — bez výplně, ale opakovaný nonce se stejným klíčem je katastrofální u CTR i GCM. ECB je zde jen pro kompatibilitu a výuku: stejné otevřené bloky se šifrují na stejné šifrované bloky (proslulý ECB tučňák).
Spolupráce s OpenSSL — výstupy CBC a CTR z této stránky (výplň PKCS#7, surový klíč) lze přenést příkazovým řádkem openssl enc:
openssl enc -aes-256-cbc -K <64-hex-klíč> -iv <32-hex-iv> -in zprava.txt -out zprava.enc
openssl enc -d -aes-256-cbc -K <klíč> -iv <iv> -in zprava.enc -out zprava.txt
Totéž funguje s -aes-128-cbc, -aes-192-cbc, -aes-256-ctr (IV o 16 bajtech = počáteční blok počítadla). Pozor: openssl enc nepodporuje GCM — pro autentizované šifrování použijte tuto stránku nebo openssl aesgcm z OpenSSL 3.3+.
Potřebujete místo toho čínskou státní šifru?
SM4 (GB/T 32907-2016) — blková šifra předepsaná pro čínskou komerční kryptografii, se stejnou 128bitovou velikostí bloku a klíče jako AES, ale s vlastním plánem klíčů a S-boxem — běží na samostatné stránce v režimu ECB a CBC: Šifrování a dešifrování SM4. Ostatní části rodiny SM jsou tam také: SM3 (hash), SM2 (veřejný klíč) a SM9 (kryptografie založená na identitě).
Autotest
Spustí enginy stránky proti nezávislým kotvám: testovací vektory se známými výsledky pro všechny čtyři režimy (vygenerované nezávislou nativní implementací), testovací vektory značky GCM s AAD i bez něj, křížové kontroly enginu WebCrypto proti čistě JS implementaci AES, kulatou cestu GCM a negativní testy (pozměněná značka a špatný klíč musí selhat). Nic se nikam neodesílá.
Šifrování AES od základu
Stručně: AES je celosvětově standardní bloková šifra — šifruje 16bajtové bloky klíčem o délce 128, 192 nebo 256 bitů — a režim, ve kterém ji použijete (GCM, CBC, CTR, ECB), určuje, jak se bloky řetězí, k čemu slouží IV a zda lze zjistit neoprávněnou změnu; pokud nemáte důvod volit jinak, použijte GCM.
Co je AES (FIPS 197)

Bloková šifra. AES (návrh Rijndael, normalizovaný NIST v roce 2001 jako FIPS 197) šifruje vždy 16 bajtů. Délka klíče — 16, 24 nebo 32 bajtů — určuje AES-128, -192 nebo -256 a počet vnitřních kol (10, 12, 14). Každé kolo mísí blok s podklíči odvozenými z klíče pomocí substitučních tabulek, posunů řádků a míchání sloupců. Žádný praktický útok nerozbíjí samotnou šifru: skutečná selhání jsou téměř vždy chyby v režimu, IV nebo správě klíčů, čemuž se věnuje zbytek této stránky.

Proč vůbec režim? Protože zprávy jsou zřídka dlouhé přesně 16 bajtů. Režim spojuje šifrování jednotlivých bloků: ECB šifruje bloky nezávisle; CBC XORuje každý blok s předchozím šifrovaným blokem; CTR šifruje počítadlo a XORuje jej s daty jako proudová šifra; GCM staví na CTR a přidává autentizační značku. AES zůstává stejný — režim mění všechno, co se týká záruk, které získáte.

Klíče a hesla. Klíč AES je 16, 24 nebo 32 náhodných bajtů. Lidské heslo takové není: volba Heslo na této stránce odvodí správný klíč pomocí PBKDF2-HMAC-SHA256 (výchozích 600 000 iterací, základ OWASP 2023 — podrobnosti o KDF najdete v generátoru HMAC). Heslo nikdy nepoužívejte přímo jako klíč AES: jeho entropie je jen zlomkem délky.

Porovnání čtyř režimů
RežimIV / nonceIntegritaPoznámky
GCM12 bajtů, jedinečný pro každou zprávuAno — značka 96 až 128 bitůAEAD: všude doporučený výchozí režim (TLS 1.3, SSH, formáty souborů). Přijímá také AAD.
CBC16 bajtů, nepředvídatelnýNeVýplň PKCS#7; klasický režim, ale potřebuje vedle sebe MAC. Chyby typu padding oracle jsou klasickou pastí CBC.
CTR16bajtové počáteční počítadloNeBez výplně, funguje jako proudová šifra, umožňuje přímý přístup; opakování nonce se stejným klíčem prozradí XOR otevřených textů.
ECBžádnýNeStejné bloky → stejný šifrovaný text. Ukázka ECB-tučňák. Jen pro kompatibilitu.

Pravidla pro IV v kostce. IV není tajný — posílejte jej spolu se šifrovaným textem — ale požadavky na jeho jedinečnost se liší: CBC vyžaduje nepředvídatelný IV; GCM a CTR vyžadují pouze, aby se se stejným klíčem nikdy nepoužil stejný nonce (u GCM je opakování nonce ještě horší: prozradí klíč pro autentizaci). Tlačítko Náhodný IV na této stránce používá bezpečný generátor náhodných čísel prohlížeče; tlačítko Samé nuly slouží k reprodukci testovacích vektorů, ne pro skutečné zprávy.

Výplň. CBC a ECB potřebují celé bloky, proto PKCS#7 přidá 1 až 16 bajtů, každý s hodnotou délky výplně. Proto šifrované texty CBC narůstají až o 16 bajtů a proto dešifrování špatným klíčem obvykle selže chybou výplně. CTR a GCM fungují jako proudové šifry a výplň nepotřebují — délka šifrovaného textu se přesně rovná délce otevřeného textu (vyzkoušejte ukázku v režimu CTR: 43 bajtů na vstupu, 43 bajtů na výstupu).

CFB a OFB (zbývající dva klasické režimy) nejsou na této stránce implementovány: fungují jako proudové šifry podobně jako CTR, ale bez jakékoli výhody a přežívají hlavně ve starých protokolech.

Co přidává GCM (AEAD, značky, AAD)

Autentizované šifrování. GCM = šifrování CTR + autentizátor GHASH nad šifrovaným textem, IV a AAD. Výstupní značka je otiskem všeho: změníte-li jediný bit šifrovaného textu, IV nebo AAD, značka přestane odpovídat, takže příjemce může ověřit, že zpráva je nepoškozená a pochází od držitele klíče. CBC+HMAC dosáhne totéž jen při správném složení (šifrovat-pak-MAC) — GCM to řeší už konstrukcí.

AAD. Dodatečná ověřovaná data se přenášejí v čitelné podobě, ale značka je kryje: hlavičky protokolu, názvy souborů, identifikátory algoritmů. Příjemce musí dodat přesně stejné bajty AAD, jinak kontrola značky selže — to je smysl věci.

Délka značky. Výchozí 128bitová značka je doporučení; kratší značky (96 až 120 bitů) obchodují odolnost proti padělání za menší velikost. Pod 96 bitů se bezpečnostní důkazy GCM rychle zhoršují, proto tato stránka dále nejde.

Katastrofa s nonce. Opakované použití 12bajtového nonce GCM se stejným klíčem prozradí XOR otevřených textů obou zpráv a podklíč pro autentizaci — poté jsou možné padělky všech budoucích zpráv pod tímto klíčem. Systémy, které nemohou zaručit jedinečnost, používají varianty odolné vůči chybnému nonce (AES-GCM-SIV, RFC 8452).

Kontrolní hodnoty — reprodukujte je na této stránce

První řádek je známý jednoblokový příklad podle FIPS 197; ostatní byly vygenerovány nezávislou nativní implementací (OpenSSL přes Node.js) a znovu ověřeny na enginech této stránky. Vložte klíč, IV a vstup do stránky a každý řádek lze reprodukovat.

PřípadVstupyOčekávaný výstup
AES-128, jeden blok (podle FIPS 197)key 000102..0f, plaintext 00112233..ff69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCMkey 000102..0f, IV 606162..6b, plaintext 0011..ef ×2ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, stejné, ale s AAD deadbeefkey 000102..1fct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBCkey 000102..1f, IV 101112..1f, plaintext 0011..ef ×20e2392dd6f690b44a5a1b4fdff3b7f83cb9ab59d9900119cc5f83e062d95fb643b1a94b514ea2f3b95f84c900b5c98a8
AES-256-CTR (stejný vstup jako CBC výše)43-byte plaintext → 43-byte ciphertexte9d2cdb9f661359178ed366dfa3a4671f8e20efd723f090eb7d1d524d480fd3c
Časté chyby
  • Použití ECB kvůli tomu, že nepotřebuje IV. Tato výhoda je past: vzory bloků přecházejí přímo do šifrovaného textu (zašifrujete-li bitmapu, obrázek je stále vidět). ECB je přijatelné jen pro jednotlivé bloky nebo přesně 16bajtové náhodné klíče — v praxi nikdy záměrně.
  • Opakované použití nonce/IV. U GCM nebo CTR se stejným klíčem je to jediná chyba, která rozbije všechno najednou. Systémy založené na počítadlech (tlačítko Náhodný IV na této stránce) existují proto, aby to bylo nemožné.
  • Považování IV za tajný. Není tajný. Ukládejte jej nebo přenášejte spolu se šifrovaným textem. Jeho skrývání nic nepřináší a vede k opakovanému použití.
  • Použití hesla jako klíče. "hunter2hunter2hunter2hunter2" má 32 bajtů, ale nemá 256 bitů entropie — je to slovo ze slovníku s výplní. Odvoďte klíč pomocí PBKDF2 (je zabudován v této stránce) nebo vygenerujte náhodný klíč.
  • Předpoklad, že CBC odhalí neoprávněnou změnu. Změníte-li v šifrovaném textu CBC jeden bit, dešifrování „proběhne“ s tiše poškozeným otevřeným textem. Změnu zviditelní jen značka GCM (nebo explicitní HMAC).
  • Porovnávání šifrovaných textů GCM. Při náhodných nonce se stejný otevřený text pokaždé zašifruje jinak — a to je vlastnost. Deterministické šifrování je jiný, specializovaný nástroj.
Časté dotazy

Je AES-128 ještě bezpečný, nebo je potřeba 256? Oba jsou bezpečné proti realistickým útočníkům; nejlepší známé útoky zmenšují rezervu jen nepatrně. AES-256 má význam hlavně pro dlouhodobě chráněná data a z hlediska postkvantové bezpečnosti (Groverův algoritmus snižuje sílu klíče na polovinu, takže AES-256 zůstává na ekvivalentu cca 128 bitů).

Proč openssl enc nepodporuje GCM? Příkaz enc vznikl před AEAD a nemá způsob, jak přenášet značku; OpenSSL 3.3 proto přidal samostatný příkaz aesgcm. Výstup GCM na této stránce uvádí značku na samostatném řádku, takže ji lze přesouvat zvlášť.

Co je zabalení klíčů (AES-KW)? Speciální režim pro šifrování jiných klíčů po pevných blocích 64 bitů se samostatnou kontrolou integrity. Zde není nabízen, protože jeho vstupy a výstupy mají tvar klíčů, nikoli zpráv, a chybné použití je běžné.

Proč má šifrovaný text CTR stejnou délku jako otevřený text, ale u CBC je delší? CTR a GCM fungují jako proudová šifra (bez výplně); CBC a ECB doplňují výplní PKCS#7 do celého 16bajtového bloku. Rozdíl v délce je záměrný, není to chyba.

Lze dešifrovat něco, co bylo zašifrováno jinde? Ano, pokud znáte přesný režim, klíč a IV (u GCM také značku). Výstupní řádky této stránky zaznamenávají všechny tyto údaje, takže parametry lze přenést mezi nástroji — kontrolní příkazy OpenSSL jsou uvedeny v boxu výše.