/ / Decrittografia AES Java con chiave errata - java, encryption, aes, badpaddingexception

Decrittografia AES Java con chiave errata - java, encryption, aes, badpaddingexception

Ho scritto una semplice crittografia e decrittografia Java AES come di seguito (per scopi didattici):

//Encryption
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
String encryptedString = Base64.encodeBase64String(cipher.doFinal(strToEncrypt.getBytes()));
return encryptedString;

//Decryption
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
String decryptedString = new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt)));
return decryptedString;

La chiave di crittografia è una stringa di lunghezza variabile, I MD5 ha cancellato la stringa per ottenere la chiave a 128 bit.

Posso crittografare e decodificare correttamente i dati utilizzando la stessa chiave. Ma se decrypt i dati con la chiave sbagliata, ho ottenuto l'eccezione qui sotto:

javax.crypto.BadPaddingException: Given final block not properly padded

In realtà quello che mi aspetto è un byte sbagliato prodottodalla decifrazione della chiave errata, ma non dall'eccezione generata come sopra, perché se vengono prodotti byte errati, l'hacker potrebbe non sapere se la decrittografia è corretta o meno. Se l'eccezione viene lanciata come sopra, l'uscita della forza bruta diventerà più facile da determinare.

Quindi, cosa succede al mio codice?

Modificare:

Penso di aver fatto un errore qui. L'hacker potrebbe non utilizzare il mio programma per decrittografarlo. Quindi, per AES, se una persona decifra fallisce, saprà che la decrittografia è fallita, ma non come pensavo di ottenere byte errati dalla decifrazione? È terribile...

risposte:

5 per risposta № 1

Non c'è niente di sbagliato nel tuo codice (anche sepotresti renderlo più robusto specificando una codifica per le trasformazioni tra caratteri e byte piuttosto che fare affidamento sulla codifica della piattaforma). Il padding ha un determinato formato in modo che possa essere rimosso dopo la decodifica. Quando decifri con una chiave errata, anche il padding è confuso e non può essere rimosso. Ciò causa l'eccezione.

Nella maggior parte dei casi un utente malintenzionato saprà di avereha ottenuto la chiave sbagliata non solo a causa del padding. I byte di dati in genere hanno anche una struttura (ad esempio un determinato formato di file) o nel tuo caso, rileverà caratteri insoliti o una codifica di caratteri non valida. Se prendi utf-8 per esempio, non tutte le stringhe binarie sono una codifica utf-8 valida.