La decifratura DES fallisce con "bad decrypt" o un errore di padding — cosa verifico?
La decifratura richiede che ogni parametro corrisponda a chi ha cifrato: i byte della chiave, la lunghezza (8/16/24), la modalità (ECB/CBC), l'IV, il padding e se il ciphertext è hex o Base64. Le due trappole più comuni: lunghezza della chiave sbagliata (una "chiave DES" di 32 caratteri hex è 16 byte — è 3DES 2-key, non DES singolo) e confusione sui nomi del padding (il PKCS5Padding di Java È PKCS#7 per DES — non scegliere None). Il pannello richiudibile a destra mostra un comando OpenSSL equivalente per le impostazioni correnti; inviarlo all'altra parte è il modo più rapido per trovare la divergenza.
Quanto è lunga una chiave DES? E il 3DES?
DES singolo: 64 bit nominali (8 byte, 56 effettivi — un bit per byte è di parità). Il 3DES esiste in due forme: 2-key (16 byte, K1‖K2 con K3=K1) e 3-key (24 byte, K1‖K2‖K3). Il materiale di chiave nominale è di 112/168 bit, ma la forza di sicurezza effettiva secondo NIST (SP 800-57 Part 1 Rev.5, tabella 2) è di circa 80 e 112 bit — e la forma 3-key è anch'essa deprecata. Questo strumento riconosce la forma dal numero di byte; qualsiasi cosa diversa da 8/16/24 genera un errore — CryptoJS e openssl enc -K invece troncano o riempiono con zeri in silenzio, ed è la causa numero uno dei fallimenti di interop.
Cos'è l'IV e quanto è lungo per DES?
L'IV è il valore a 8 byte che CBC mescola nel primo blocco; ECB non lo usa. Deve essere esattamente 8 byte (16 cifre esadecimali o 8 caratteri ASCII). Nota che l'IV di DES è 8 byte mentre quello di AES è 16 — copiare una lunghezza di IV da AES fallisce immediatamente. Non riutilizzare mai un IV con la stessa chiave.
A cosa corrisponde il DES/ECB/PKCS5Padding di Java in questo strumento?
Modalità ECB + padding PKCS#7. Nel JCE, il "PKCS5Padding" per DES esegue l'algoritmo generico PKCS#7 — il PKCS#5 ha definito padding solo per blocchi a 8 byte, che sono proprio quelli di DES. L'output di Cipher.getInstance("DES/ECB/PKCS5Padding") di Java si decifra qui con ECB + PKCS#7 e una chiave DES singolo a 8 byte. ⚠️ Il 3DES di Java (DESede) accetta solo chiavi a 24 byte — per la forma 2-key devi espandere K1‖K2 a K1‖K2‖K1 tu stesso.
Come si mappano i nomi degli algoritmi des-ede3 di PHP?
PHP prende in prestito i nomi di OpenSSL: des-ede3-cbc è 3DES 3-key + CBC, des-ede3-ecb è 3-key + ECB; des-ede-cbc è la forma 2-key. Una chiave a 24 byte seleziona 3-key, 16 byte seleziona 2-key.
Cosa sono i bit di parità in una chiave DES? Vengono verificati?
Il bit basso di ogni byte della chiave è definito come bit di parità, quindi la vera chiave a 56 bit risiede dentro 64 bit. FIPS 46-3 non richiede di verificarli — OpenSSL, Java e questo strumento li ignorano; funzionano qualsiasi 8 byte, e cambiare i bit di parità non cambia il ciphertext. .NET è l'eccezione: normalizza prima la parità e poi controlla una tabella di chiavi deboli, quindi le chiavi nulle e le altre chiavi deboli vengono rifiutate da .NET mentre ogni altra libreria cifra felicemente — una trappola che si attiva solo migrando chiavi di test da Java/OpenSSL a .NET.
Cosa succede nel 3DES quando K1 = K2?
Nel 3DES 2-key, K3 è sempre uguale a K1; se anche K1 = K2, l'intera catena EDE collassa in DES singolo: E_K(D_K(E_K(P))) = E_K(P). Succede lo stesso quando tutti e tre i componenti a 8 byte di una chiave a 24 byte sono identici. Questo strumento cifra comunque (l'interop viene prima), ma la forza reale è allora quella di DES singolo, 56 bit, non 3DES.
DES è ancora sicuro?
No — è solo per interop con sistemi legacy. Il NIST ha ritirato DES singolo il 2005-05-19 (le chiavi a 56 bit si forzano con brute force; il Deep Crack di EFF ci è riuscito in 56 ore nel 1998, 22 ore l'anno dopo con distributed.net). SP 800-131A Rev.2 elenca la cifratura TDEA 2-key come Disallowed e quella a 3-key come Disallowed dopo il 2023-12-31 (la decifratura resta "Legacy use", mantenuta solo per leggere dati storici); SP 800-67 in sé è stato ritirato il 2024-01-01. Il piccolo blocco a 64 bit porta anche il limite di birthday di classe Sweet32 (CVE-2016-2183) — il NIST limita un singolo key bundle a 2²⁰ blocchi (≈8 MB) di testo in chiaro. Per tutto ciò che è nuovo usa AES-256. Questo strumento esiste perché le clearing bancarie, i gateway di pagamento e i vecchi sistemi Java/.NET girano ancora su messaggi dell'era DES — sistemarli comincia dal saperli leggere.
Perché il mio risultato 3DES differisce da Java/PHP?
Controlla in ordine di probabilità: ① lunghezza della chiave — la "chiave DES di 32 cifre hex" dell'altra parte è 16 byte (3DES 2-key), tu hai decifrato come DES singolo; ② modalità — il "DES" nudo di Java usa ECB di default, i nomi di OpenSSL senza suffisso di modalità, des-ede3/des-ede, sono ECB (l'alias di CBC è -des3); openssl_encrypt di PHP richiede il nome dell'algoritmo esplicito — a confondere è che di default produce testo Base64, non byte grezzi; ③ padding — il vecchio mcrypt di PHP spesso usava Zero padding, il JCE usa PKCS#5/#7; ④ codifica — hex vs Base64, e maiuscole/minuscole; ⑤ la trappola della password di CryptoJS — passare una stringa come "chiave" fa eseguire la derivazione della chiave (MD5 + salt casuale, output con prefisso Salted__, diverso ogni volta), che non è affatto la chiave grezza — la causa principale del "stesso codice, risultato diverso a ogni esecuzione". Questo strumento ti lascia cambiare uno a uno ciascun parametro; il comando OpenSSL equivalente a destra può essere inviato all'altra parte per riprodurre.
ECB o CBC — quale uso?
Quella che richiede il sistema con cui stai parlando — l'interop legacy non ha diritto di voto. Se davvero puoi scegliere, sempre CBC con IV casuale: ECB cifra blocchi di plaintext uguali in blocchi di ciphertext uguali, e i piccoli blocchi a 8 byte di DES fanno trapelare i pattern ancora più visibilmente di AES-ECB. I protocolli bancari dell'era DES usano entrambi; controlla prima il documento del protocollo.
Funziona offline? I miei dati vengono caricati?
Tutto il calcolo avviene nel tuo browser (TypeScript puro, zero dipendenze, zero richieste di rete); chiavi e testo in chiaro non lasciano mai il dispositivo. Una volta caricata la pagina puoi andare offline e continuare a lavorare. È l'unica forma accettabile per uno strumento che gestisce chiavi.
2-key o 3-key 3DES — quale è più comune nei sistemi legacy?
La 2-key (16 byte) è più comune: banche e industria dei pagamenti hanno distribuito hardware a chiave di 16 byte per compatibilità, e SP 800-67 ha tenuto per essa una data di deprecazione separata (più antica). Quindi una "chiave 3DES" di 32 caratteri hex è molto probabilmente la forma 2-key. Questo strumento rileva la forma dal numero di byte automaticamente.