Cifra / decifra AES

Cifri o decifri con AES-128, AES-192 o AES-256 (FIPS 197) in modalità GCM (cifratura autenticata), CBC, CTR o ECB. Le chiavi sono byte grezzi in esadecimale o Base64, oppure derivate da una password con PBKDF2-HMAC-SHA256. GCM supporta AAD e mostra il tag di autenticazione separatamente; gli output di CBC/CTR/ECB sono compatibili con enc di OpenSSL. Per gli hash vedi il Generatore di hash, per i MAC con chiave il Generatore HMAC, per i cifrari storici la pagina dei Cifrari storici di questa famiglia.
Viene eseguito interamente in locale: chiavi e testo in chiaro non lasciano mai la sua scheda. File fino a 200 MB.
Tutto ciò che digita qui resta in questa scheda — ma non significa “sicuro per segreti di produzione”. La memoria del browser, le estensioni e chi guarda da dietro le spalle vedono ciò che incolla. Usi questa pagina per imparare, verificare e testare l'interoperabilità, non per gestire dati reali dei clienti.
Direzione: Modalità: Output:
GCM = AES-GCM con nonce di 12 byte e tag di autenticazione a 128 bit (AEAD: riservatezza + integrità). È l'impostazione predefinita quando conta la sicurezza.
L'esadecimale accetta spazi, due punti e prefissi 0x.
Non riutilizzi mai un nonce con la stessa chiave in GCM o CTR.
Lunghezza del tag:
Le righe dei parametri registrano la lettura esatta della chiave, l'IV, la dimensione dell'AAD e il tag, così un risultato copiato e incollato può sempre essere riprodotto su un'altra macchina.
Quale modalità scegliere?
GCM è la risposta predefinita: cifra e autentica — la riga del tag rende rilevabile una manomissione (provi a decifrare con un byte del tag alterato e la pagina rifiuta). CBC nasconde i pattern a blocchi ma non offre integrità; lo abbini a un HMAC (vedi il Generatore HMAC) se proprio deve usarlo. CTR trasforma AES in un cifrario a flusso — senza padding, ma un nonce riutilizzato con la stessa chiave è catastrofico sia in CTR sia in GCM. ECB è qui solo per compatibilità e didattica: blocchi di testo identici producono blocchi cifrati identici (il celebre pinguino ECB).
Interoperabilità con OpenSSL — gli output CBC e CTR di questa pagina (padding PKCS#7, chiave grezza) fanno andata e ritorno con la riga di comando openssl enc:
openssl enc -aes-256-cbc -K <chiave-64-hex> -iv <iv-32-hex> -in msg.txt -out msg.enc
openssl enc -d -aes-256-cbc -K <chiave> -iv <iv> -in msg.enc -out msg.txt
Lo stesso vale con -aes-128-cbc, -aes-192-cbc, -aes-256-ctr (IV di 16 byte = blocco contatore iniziale). Nota: openssl enc non supporta GCM — usi questa pagina, oppure openssl aesgcm da OpenSSL 3.3+, per la cifratura autenticata.
Serve invece il cifrario nazionale cinese?
SM4 (GB/T 32907-2016) — il cifrario a blocchi previsto dalla crittografia commerciale cinese, con blocco e chiave da 128 bit come AES ma con una propria pianificazione delle chiavi e una propria S-box — ha una pagina dedicata in modalità ECB e CBC: Cifra / decifra SM4. Anche il resto della suite SM si trova lì: SM3 (hash), SM2 (chiave pubblica) e SM9 (crittografia basata sull'identità).
Autotest
Esegue i motori della pagina su ancore indipendenti: vettori con risposta nota per tutte e quattro le modalità (generati da un'implementazione nativa indipendente), vettori del tag GCM con e senza AAD, confronti incrociati del motore WebCrypto con il motore AES in puro JS, andata e ritorno GCM e test negativi (tag alterato e chiave errata devono fallire). Nulla viene inviato da nessuna parte.
Come funziona la cifratura AES, spiegata da zero
In una frase: AES è il cifrario a blocchi standard a livello mondiale — mescola blocchi di 16 byte con una chiave a 128, 192 o 256 bit — e la modalità in cui lo si esegue (GCM, CBC, CTR, ECB) decide come i blocchi sono concatenati, a cosa serve l'IV e se una manomissione è rilevabile; scelga GCM a meno che non abbia un motivo per non farlo.
Che cos'è AES (FIPS 197)

Il cifrario a blocchi. AES (il progetto Rijndael, standardizzato dal NIST nel 2001 come FIPS 197) cifra esattamente 16 byte alla volta. La lunghezza della chiave — 16, 24 o 32 byte — seleziona AES-128, -192 o -256 e il numero di round interni (10, 12, 14). Ogni round mescola il blocco con le round key ricavate dalla chiave tramite tabelle di sostituzione, spostamenti di righe e mescolanze di colonne. Nessun attacco pratico rompe il cifrario in sé: i fallimenti reali sono quasi sempre errori di modalità, di IV o di gestione delle chiavi, ed è di questo che parla il resto della pagina.

Perché serve una modalità? Perché i messaggi raramente sono di 16 byte. La modalità unisce le cifrature dei blocchi: ECB cifra i blocchi in modo indipendente; CBC fa lo XOR di ogni blocco con il testo cifrato precedente; CTR cifra un contatore e ne fa lo XOR con i dati come un cifrario a flusso; GCM si basa su CTR e aggiunge un tag di autenticazione. AES resta lo stesso — la modalità cambia tutto ciò che si ottiene in termini di garanzie.

Chiavi e password. Una chiave AES è composta da 16, 24 o 32 byte casuali. Una password scelta da una persona non lo è: l'opzione Password di questa pagina ricava una chiave adeguata con PBKDF2-HMAC-SHA256 (600.000 iterazioni per impostazione predefinita, la base OWASP 2023 — vedi il Generatore HMAC per i dettagli della KDF). Non usi mai una stringa di password direttamente come chiave AES: la sua entropia è una piccola frazione della lunghezza.

Le quattro modalità a confronto
ModalitàIV / nonceIntegritàNote
GCM12 byte, unico per messaggioSì — tag da 96..128 bitAEAD: il predefinito consigliato ovunque (TLS 1.3, SSH, formati di file). Accetta anche AAD.
CBC16 byte, imprevedibileNoPadding PKCS#7; classico ma richiede un MAC accanto. I bug di padding oracle sono la classica trappola di CBC.
CTRcontatore iniziale di 16 byteNoNessun padding, tipo flusso, accesso casuale; un nonce riutilizzato con la stessa chiave fa trapelare lo XOR tra testi in chiaro.
ECBnessunoNoBlocchi identici → testo cifrato identico. La dimostrazione del pinguino ECB. Solo per compatibilità.

Regole dell'IV in un paragrafo. L'IV non è un segreto — lo invii accanto al testo cifrato — ma le sue regole di unicità differiscono: CBC richiede un IV imprevedibile; GCM e CTR chiedono solo di non riutilizzare mai lo stesso nonce con la stessa chiave (il riuso del nonce in GCM è peggiore: fa trapelare la chiave di autenticazione). Il pulsante IV casuale usa l'RNG sicuro del browser; il pulsante Tutti zeri esiste per riprodurre vettori di test, non per messaggi reali.

Padding. CBC ed ECB richiedono blocchi completi, quindi il padding PKCS#7 aggiunge da 1 a 16 byte, ciascuno uguale alla lunghezza del padding. Per questo i testi cifrati CBC crescono fino a 16 byte e perché decifrare con la chiave sbagliata di solito fallisce con un errore di padding. CTR e GCM sono di tipo flusso e non richiedono padding — la lunghezza del testo cifrato è esattamente quella del testo in chiaro (provi l'Esempio in modalità CTR: 43 byte in ingresso, 43 in uscita).

CFB e OFB (le due modalità classiche rimanenti) non sono implementate in questa pagina: sono di tipo flusso come CTR ma senza alcun vantaggio su di essa, e sopravvivono soprattutto in vecchi protocolli.

Che cosa aggiunge GCM (AEAD, tag, AAD)

Cifratura autenticata. GCM = cifratura CTR + un autenticatore GHASH che copre testo cifrato, IV e AAD. Il tag in uscita è un'impronta di tutto: se cambia anche un solo bit del testo cifrato, dell'IV o dell'AAD, il tag non corrisponde più, quindi il destinatario può dimostrare che il messaggio è integro e proviene da chi detiene la chiave. CBC+HMAC ottiene lo stesso risultato solo se lo si compone correttamente (encrypt-then-MAC) — GCM lo ottiene correttamente per costruzione.

AAD. I dati aggiuntivi autenticati viaggiano in chiaro ma sono coperti dal tag: intestazioni di protocollo, nomi di file, identificatori di algoritmo. Il destinatario deve fornire gli stessi byte di AAD, altrimenti la verifica del tag fallisce — ed è proprio questo lo scopo.

Lunghezza del tag. Il tag predefinito da 128 bit è la raccomandazione; tag più corti (96..120 bit) scambiano la resistenza alla falsificazione con le dimensioni. Sotto i 96 bit le dimostrazioni di sicurezza di GCM si degradano rapidamente, ed è per questo che la pagina si ferma lì.

La catastrofe del nonce. Riutilizzare un nonce GCM di 12 byte con la stessa chiave fa trapelare lo XOR dei due messaggi in chiaro e la sottochiave di autenticazione — dopodiché sono possibili falsificazioni per tutti i messaggi futuri con quella chiave. I sistemi che non possono garantire l'unicità usano varianti resistenti al cattivo uso del nonce (AES-GCM-SIV, RFC 8452).

Valori di riferimento — li riproduca su questa pagina

La prima riga è il celebre esempio a blocco singolo di FIPS 197; le altre sono state generate da un'implementazione nativa indipendente (OpenSSL tramite Node.js) e riverificate sui motori di questa pagina. Incolli chiave, IV e input nella pagina per riprodurre ciascuna riga.

CasoInputOutput atteso
AES-128 blocco singolo (stile 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, come sopra ma con AAD deadbeefkey 000102..1fct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBCkey 000102..1f, IV 101112..1f, plaintext 0011..ef ×20e2392dd6f690b44a5a1b4fdff3b7f83cb9ab59d9900119cc5f83e062d95fb643b1a94b514ea2f3b95f84c900b5c98a8
AES-256-CTR (stesso input di CBC sopra)43-byte plaintext → 43-byte ciphertexte9d2cdb9f661359178ed366dfa3a4671f8e20efd723f090eb7d1d524d480fd3c
Errori comuni
  • Usare ECB perché non richiede IV. La comodità è la trappola: i pattern dei blocchi passano direttamente nel testo cifrato (cifri un'immagine bitmap e l'immagine resta visibile). ECB è accettabile solo per blocchi singoli o per chiavi casuali di esattamente 16 byte — in pratica, mai per scelta.
  • Riutilizzare un nonce/IV. Con GCM o CTR sotto una stessa chiave è l'unico errore che rompe tutto in una volta. I sistemi basati su contatore (il pulsante IV casuale di questa pagina) esistono proprio per renderlo impossibile.
  • Trattare l'IV come un segreto. Non lo è. Lo salvi o lo trasmetta accanto al testo cifrato. Nasconderlo non serve a nulla e invita al riuso.
  • Usare una password come chiave. "hunter2hunter2hunter2hunter2" è di 32 byte ma non ha 256 bit di entropia — è una parola da dizionario con imbottitura. Derivi con PBKDF2 (integrato in questa pagina) oppure generi una chiave casuale.
  • Credere che CBC rilevi le manomissioni. Alterate un bit del testo cifrato CBC e la decifratura “riesce” con un testo in chiaro silenziosamente corrotto. Solo il tag di GCM (o un HMAC esplicito) rende visibile la manomissione.
  • Confrontare testi cifrati GCM per uguaglianza. Con nonce casuali lo stesso testo in chiaro viene cifrato in modo diverso ogni volta — ed è una caratteristica. La cifratura deterministica è uno strumento diverso e specializzato.
Domande frequenti

AES-128 è ancora sicuro, o serve il 256? Entrambi sono sicuri contro attaccanti realistici; i migliori attacchi noti riducono solo una frazione del margine. AES-256 conta soprattutto per segreti a lungo termine e per la tranquillità post-quantistica (l'algoritmo di Grover dimezza la forza della chiave, portando AES-256 a un'equivalenza di circa 128 bit).

Perché openssl enc non fa GCM? Il comando enc precede AEAD e non ha modo di trasportare un tag; OpenSSL 3.3 ha aggiunto invece un comando dedicato, aesgcm. L'output GCM di questa pagina mantiene il tag su una riga separata, così potete spostare entrambi in modo esplicito.

Che cos'è il key wrapping (AES-KW)? Una modalità specializzata per cifrare altre chiavi a blocchi fissi da 64 bit, con un proprio controllo di integrità. Non è offerta qui perché i suoi input e output hanno forma di chiave, non di messaggio — l'uso improprio è la norma.

Perché il testo cifrato CTR ha la stessa lunghezza del testo in chiaro, ma quello CBC è più lungo? CTR e GCM sono di tipo flusso (nessun padding); CBC/ECB riempiono fino a un blocco completo di 16 byte con PKCS#7. La differenza di lunghezza è voluta, non un errore.

Posso decifrare qualcosa cifrato altrove? Sì, se conosce esattamente modalità, chiave, IV (e per GCM il tag). Le righe di output di questa pagina registrano tutti questi dati con precisione, così può trasferire i parametri tra strumenti diversi — il riquadro OpenSSL sopra mostra le righe di comando corrispondenti.