08/04/13 10:02
drinoda
Salve a tutti.
Il mio intento è quello di prendere una stringa e crittografarla tramite AES. Il codice che sto utilizzando è il seguente:
Non so perché ma questo codice funziona 4/5, in quanto alla quinta/sssta esecuzione in genere lancia la seguente eccezione:"Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded" .
In particolare la riga incriminata è String original = new String(c.doFinal(password_crittata.getBytes()));
Non riesco a capire il perché, se ha capito dove sto sbagliando e può cortesemente indicarmelo gliene sarei lieto.
grazie
----
edit:
prove di fix che ho effettuato:
1) Ho impostato come valore della grandezza massima del "generatore di chiavi" a 128;
altri problemi che ci sono e non ho notato prima:
1) In alcuni casi, non vi è nessuna eccezione, ma non "decripta" in modo corretto.
Molto probabilmente sto sbagliando con la chiave, ma non riesco a capire come mai.
----
edit2:
Spulciando su google ho trovato uno che aveva un problema simile e gli è stato suggerito di utilizzare Base64.encode(...) e Base64.decode(...).
Con le opportune modifiche le ho inserite nel mio codice su:
- String password_crittata = new String(Base64.encode(c.doFinal(password.getBytes())));
- String original = new String(c.doFinal(Base64.decode(password_crittata)));
Ora sembra funzionare tutto correttamente e senza errori.
Ora il problema è che non ho capisco il perché ora tutto funzioni, e ovviamente questa cosa non mi 'garba'.
Il mio intento è quello di prendere una stringa e crittografarla tramite AES. Il codice che sto utilizzando è il seguente:
String password = "mammmamia.!12ieri8.10g1orn1f4"; SecretKey sk = KeyGenerator.getInstance("AES").generateKey(); System.out.println(sk); Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding"); c.init(Cipher.ENCRYPT_MODE, sk); String password_crittata = new String(c.doFinal(password.getBytes())); System.out.println("CRP : "+password_crittata); c.init(Cipher.DECRYPT_MODE, sk); String original = new String(c.doFinal(password_crittata.getBytes())); System.out.println("DCP : "+original); }
Non so perché ma questo codice funziona 4/5, in quanto alla quinta/sssta esecuzione in genere lancia la seguente eccezione:"Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded" .
In particolare la riga incriminata è String original = new String(c.doFinal(password_crittata.getBytes()));
Non riesco a capire il perché, se ha capito dove sto sbagliando e può cortesemente indicarmelo gliene sarei lieto.
grazie
----
edit:
prove di fix che ho effettuato:
1) Ho impostato come valore della grandezza massima del "generatore di chiavi" a 128;
altri problemi che ci sono e non ho notato prima:
1) In alcuni casi, non vi è nessuna eccezione, ma non "decripta" in modo corretto.
Molto probabilmente sto sbagliando con la chiave, ma non riesco a capire come mai.
----
edit2:
Spulciando su google ho trovato uno che aveva un problema simile e gli è stato suggerito di utilizzare Base64.encode(...) e Base64.decode(...).
Con le opportune modifiche le ho inserite nel mio codice su:
- String password_crittata = new String(Base64.encode(c.doFinal(password.getBytes())));
- String original = new String(c.doFinal(Base64.decode(password_crittata)));
Ora sembra funzionare tutto correttamente e senza errori.
Ora il problema è che non ho capisco il perché ora tutto funzioni, e ovviamente questa cosa non mi 'garba'.
Ultima modifica effettuata da drinoda 08/04/13 11:17
aaa