Criptare / decriptare AES

Criptare sau decriptare cu AES-128, AES-192 sau AES-256 (FIPS 197) în modul GCM (criptare autentificată), CBC, CTR sau ECB. Cheile sunt octeți hex sau Base64 ori sunt derivate dintr-o parolă cu PBKDF2-HMAC-SHA256. GCM acceptă AAD și afișează separat eticheta de autentificare; ieșirile CBC/CTR/ECB sunt compatibile cu enc din OpenSSL. Pentru funcții hash: Generatorul hash; pentru MAC-uri cu cheie: Generatorul HMAC; pentru cifruri vechi: pagina Cifruri vechi din această familie.
Rulează integral local — cheile și textul clar nu părăsesc niciodată fila. Fișiere de până la 200 MB.
Tot ce se tastează aici rămâne în această filă — dar aceasta nu înseamnă „sigur pentru secrete de producție”. Memoria browserului, extensiile și persoanele care privesc peste umăr văd ce se lipește. Această pagină este potrivită pentru învățare, verificare și interoperabilitate, nu pentru gestionarea datelor reale ale clienților.
Direcție: Mod: Ieșire:
GCM = AES-GCM cu nonce de 12 octeți și etichetă de autentificare de 128 de biți (AEAD: confidențialitate + integritate). Implicit atunci când securitatea este scopul.
Formatul hex tolerează spații, două puncte și prefixe 0x.
Nu se reutilizează niciodată un nonce sub aceeași cheie în GCM sau CTR.
Lungimea etichetei:
Liniile de parametri înregistrează citirea exactă a cheii, IV-ul, dimensiunea AAD și eticheta, astfel încât un rezultat copiat poate fi reprodus oricând pe alt calculator.
Ce mod să se aleagă?
GCM este răspunsul implicit: criptează și autentifică — rândul etichetei face modificările detectabile (dacă se încearcă decriptarea cu un octet inversat din etichetă, pagina refuză). CBC ascunde tiparele de bloc, dar nu oferă integritate; se asociază cu un HMAC (a se vedea Generatorul HMAC) dacă trebuie folosit. CTR transformă AES într-un cifru de flux — fără umplutură, dar un nonce reutilizat sub aceeași cheie este catastrofal atât în CTR, cât și în GCM. ECB există aici doar pentru compatibilitate și predare: blocurile identice de text clar se criptează în blocuri identice de text cifrat (celebrul pinguin ECB).
Interoperabilitate OpenSSL — ieșirile CBC și CTR din această pagină (umplutură PKCS#7, cheie brută) fac ducere-întoarcere cu linia de comandă openssl enc:
openssl enc -aes-256-cbc -K <cheie-hex-64> -iv <iv-hex-32> -in msg.txt -out msg.enc
openssl enc -d -aes-256-cbc -K <cheie> -iv <iv> -in msg.enc -out msg.txt
Același lucru funcționează cu -aes-128-cbc, -aes-192-cbc, -aes-256-ctr (IV de 16 octeți = blocul inițial al contorului). De reținut este că openssl enc nu acceptă GCM — pentru criptare autentificată se folosește această pagină sau openssl aesgcm din OpenSSL 3.3+.
Este nevoie de cifrul național chinezesc?
SM4 (GB/T 32907-2016) — cifrul de bloc impus în criptografia comercială chineză, cu aceeași dimensiune de bloc și de cheie de 128 de biți ca AES, dar cu propria planificare a cheii și cu propriul S-box — rulează pe propria pagină, în modurile ECB și CBC: SM4 Criptare / Decriptare. Restul suitei SM se află tot acolo: SM3 (funcție hash), SM2 (cheie publică) și SM9 (criptografie bazată pe identitate).
Autotest
Motoarele paginii rulează față de ancore independente: vectori cunoscuți pentru toate cele patru moduri (obținuți dintr-o implementare nativă independentă), vectori de etichetă GCM cu și fără AAD, verificări încrucișate ale motorului WebCrypto față de motorul AES în JavaScript pur, dus-întors GCM și teste negative (eticheta modificată și cheia greșită trebuie să eșueze). Nimic nu este trimis nicăieri.
Criptarea AES explicată de la zero
Într-o propoziție: AES este cifrul de bloc standard la nivel mondial — amestecă blocuri de 16 octeți sub o cheie de 128, 192 sau 256 de biți — iar modul în care este rulat (GCM, CBC, CTR, ECB) decide cum sunt înlănțuite blocurile, la ce servește IV-ul și dacă modificarea poate fi detectată; GCM este alegerea implicită, dacă nu există un motiv să nu fie folosit.
Ce este AES însuși (FIPS 197)

Cifrul de bloc. AES (designul Rijndael, standardizat de NIST în 2001 ca FIPS 197) criptează exact 16 octeți pe rând. Lungimea cheii — 16, 24 sau 32 de octeți — alege AES-128, -192 sau -256 și numărul de runde interne (10, 12, 14). Fiecare rundă amestecă blocul cu subchei derivate din cheie prin tabele de substituție, deplasări de rânduri și amestecări de coloane. Niciun atac practic nu sparge cifrul în sine: eșecurile din lumea reală sunt aproape întotdeauna greșeli de mod, de IV sau de gestionare a cheilor, despre care tratează restul acestei pagini.

De ce este nevoie de un mod? Pentru că mesajele sunt rareori de 16 octeți. Modul leagă criptările de bloc între ele: ECB criptează blocurile independent; CBC face XOR între fiecare bloc și textul cifrat anterior; CTR criptează un contor și face XOR cu datele, ca un cifru de flux; GCM se bazează pe CTR și adaugă o etichetă de autentificare. AES rămâne același — modul schimbă tot ce privește garanțiile obținute.

Chei și parole. O cheie AES are 16, 24 sau 32 de octeți aleatorii. O parolă introdusă de om nu este așa: opțiunea Parolă a acestei pagini derivează o cheie corespunzătoare cu PBKDF2-HMAC-SHA256 (600 000 de iterații implicit, referința OWASP 2023 — detaliile KDF se găsesc la Generatorul HMAC). Niciodată nu se folosește un șir de parolă direct drept cheie AES: entropia lui este o mică fracțiune din lungime.

Cele patru moduri comparate
ModIV / nonceIntegritateNote
GCM12 octeți, unic pentru fiecare mesajDa — etichetă de 96..128 de bițiAEAD: implicitul recomandat peste tot (TLS 1.3, SSH, formate de fișiere). Acceptă și AAD.
CBC16 octeți, imprevizibilNuUmplutură PKCS#7; clasic, dar necesită un MAC alături. Erorile padding oracle sunt capcana clasică a CBC.
CTRContor inițial de 16 octețiNuFără umplutură, de tip flux, cu acces aleatoriu; reutilizarea nonce-ului sub o cheie scurge XOR-ul textelor clare.
ECBniciunulNuBlocuri identice → text cifrat identic. Demonstrația cu pinguinul ECB. Doar pentru compatibilitate.

Regulile IV pe scurt. IV-ul nu este secret — se trimite lângă textul cifrat — dar regulile de unicitate diferă: CBC cere un IV imprevizibil; GCM și CTR cer doar să nu se reutilizeze niciodată același nonce cu aceeași cheie (reutilizarea nonce-ului în GCM este mai gravă: scurge cheia de autentificare). Butonul IV aleatoriu al paginii folosește generatorul securizat al browserului; butonul Toate zerourile există pentru reproducerea vectorilor de test, nu pentru mesaje reale.

Umplutura. CBC și ECB au nevoie de blocuri întregi, așa că umplutura PKCS#7 adaugă între 1 și 16 octeți, fiecare egal cu lungimea umpluturii. De aceea textele cifrate CBC cresc cu până la 16 octeți și de aceea decriptarea cu o cheie greșită eșuează de obicei cu o eroare de umplutură. CTR și GCM sunt de tip flux și nu au nevoie de umplutură — lungimea textului cifrat este exact lungimea textului clar (exemplul din modul CTR: 43 de octeți intră, 43 de octeți ies).

CFB și OFB (cele două moduri clasice rămase) nu sunt implementate pe această pagină: sunt de tip flux, ca CTR, dar fără niciun avantaj față de acesta și supraviețuiesc mai ales în protocoale vechi.

Ce adaugă GCM (AEAD, etichete, AAD)

Criptarea autentificată. GCM = criptare CTR + un autentificator GHASH peste textul cifrat, IV și AAD. Eticheta de ieșire este o amprentă a tuturor: dacă se schimbă un singur bit din textul cifrat, din IV sau din AAD, eticheta nu mai corespunde, astfel încât receptorul poate dovedi că mesajul este intact și provine de la deținătorul cheii. CBC+HMAC realizează același lucru doar dacă este compus corect (criptare apoi MAC) — GCM o face corect prin construcție.

AAD. Datele suplimentare autentificate circulă în clar, dar sunt acoperite de etichetă: anteturi de protocol, nume de fișiere, identificatori de algoritm. Receptorul trebuie să furnizeze exact aceiași octeți AAD, altfel verificarea etichetei eșuează — acesta este scopul.

Lungimea etichetei. Eticheta implicită de 128 de biți este recomandată; etichetele mai scurte (96..120 de biți) schimbă rezistența la falsificare pe dimensiune. Sub 96 de biți, demonstrațiile de securitate ale GCM se degradează rapid, de aceea această pagină se oprește acolo.

Catastrofa nonce-ului. Reutilizarea unui nonce GCM de 12 octeți sub aceeași cheie scurge XOR-ul textelor clare ale celor două mesaje și subcheia de autentificare — după care falsificările sunt posibile pentru toate mesajele viitoare sub acea cheie. Sistemele care nu pot garanta unicitatea folosesc variante rezistente la reutilizarea nonce-ului (AES-GCM-SIV, RFC 8452).

Valori de referință — reproducerea lor pe această pagină

Primul rând este exemplul FIPS 197 cu bloc unic, bine cunoscut; restul au fost generate de o implementare nativă independentă (OpenSSL prin Node.js) și reverificate cu motoarele acestei pagini. Cheia, IV-ul și intrarea pot fi lipite în pagină pentru a reproduce fiecare rând.

CazIntrăriIeșire așteptată
AES-128 bloc unic (stil 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, la fel, dar cu AAD deadbeefkey 000102..1fct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBCkey 000102..1f, IV 101112..1f, plaintext 0011..ef ×20e2392dd6f690b44a5a1b4fdff3b7f83cb9ab59d9900119cc5f83e062d95fb643b1a94b514ea2f3b95f84c900b5c98a8
AES-256-CTR (aceeași intrare ca la CBC de mai sus)43-byte plaintext → 43-byte ciphertexte9d2cdb9f661359178ed366dfa3a4671f8e20efd723f090eb7d1d524d480fd3c
Greșeli frecvente
  • Utilizarea ECB pentru că nu necesită IV. Comoditatea este capcana: tiparele blocurilor se scurg direct în textul cifrat (dacă se criptează o imagine bitmap, imaginea se mai distinge). ECB este acceptabil doar pentru blocuri unice sau pentru chei aleatorii de exact 16 octeți — în practică, niciodată din alegere.
  • Reutilizarea unui nonce/IV. Cu GCM sau CTR sub aceeași cheie, aceasta este singura greșeală care strică totul deodată. Sistemele bazate pe contor (butonul IV aleatoriu al acestei pagini) există pentru a o face imposibilă.
  • Tratarea IV-ului ca secret. Nu este secret. Se stochează sau se transmite lângă textul cifrat. Ascunderea lui nu aduce nimic și ispitește la reutilizare.
  • Folosirea unei parole drept cheie. "hunter2hunter2hunter2hunter2" are 32 de octeți, dar nu 256 de biți de entropie — este un cuvânt din dicționar cu umplutură. Cheia se derivează cu PBKDF2 (integrat în această pagină) sau se generează o cheie aleatorie.
  • Presupunerea că CBC detectează modificările. Dacă se inversează un bit în textul cifrat CBC, decriptarea „reușește” cu un text clar corupt fără semn. Doar eticheta GCM (sau un HMAC explicit) face modificările vizibile.
  • Compararea textelor cifrate GCM pentru egalitate. Cu nonce-uri aleatorii, același text clar se criptează diferit de fiecare dată — aceasta este o trăsătură. Criptarea deterministă este un instrument diferit, specializat.
Întrebări frecvente

AES-128 mai este sigur sau este nevoie de 256? Ambele sunt sigure în fața atacatorilor realiști; cele mai bune atacuri cunoscute reduc marja doar cu o fracțiune. AES-256 contează mai ales pentru secrete pe termen lung și pentru rezistența post-cuantică (algoritmul lui Grover înjumătățește puterea cheii, astfel că AES-256 rămâne echivalent cu aproximativ 128 de biți).

De ce nu face openssl enc GCM? Comanda enc precede AEAD și nu are cum să transporte o etichetă; OpenSSL 3.3 a adăugat în schimb o comandă dedicată, aesgcm. Ieșirea GCM a acestei pagini păstrează eticheta pe un rând separat, astfel încât ambele să poată fi mutate explicit.

Ce este împachetarea cheilor (AES-KW)? Un mod specializat pentru criptarea altor chei, în blocuri fixe de 64 de biți, cu propria verificare de integritate. Nu este oferit aici, pentru că intrările și ieșirile sale au formă de cheie, nu de mesaj — utilizarea greșită este regula.

De ce are textul cifrat CTR aceeași lungime ca textul clar, iar cel CBC este mai lung? CTR și GCM sunt de tip flux (fără umplutură); CBC/ECB completează până la un bloc întreg de 16 octeți cu PKCS#7. Diferența de lungime este intenționată, nu o eroare.

Se poate decripta ceva criptat în altă parte? Da, dacă se cunosc exact modul, cheia și IV-ul (iar pentru GCM și eticheta). Rândurile de ieșire ale acestei pagini le înregistrează pe toate cu precizie, astfel încât parametrii să poată circula între instrumente — caseta OpenSSL de mai sus arată liniile de comandă corespunzătoare.