Ciao....no, ancora nn ho risolto...
Il problema è sempre lo stesso: criptare e decriptare un psw.
Adesso sto usando questa classe:
e mi lancia eccezione quicodice:import java.io.UnsupportedEncodingException; import javax.crypto.*; import javax.crypto.Cipher; import java.security.*; import javax.crypto.KeyGenerator; public class CryptoStringUtil { private Key key = null; public CryptoStringUtil(){ initKey(); } private void initKey(){ // -------- creazione generatore di chiavi------------------------ System.out.println("Creazione del generatore di chiavi"); KeyGenerator gen = null; try { gen = KeyGenerator.getInstance("DES"); }catch (NoSuchAlgorithmException e1) { System.out.println("Algoritmo non supportato in KeyGenerator"); System.exit(1); } System.out.println("Generatore di chiavi creato."); // -------- generazione chiave ------------------------------------ System.out.println("Generazione della chiave segreta"); gen.init(new SecureRandom()); Key k = gen.generateKey(); System.out.println("Chiave generata: "); for (int i=0; i<k.getEncoded().length; i++) System.out.print("" + k.getEncoded()[i] + "\t"); System.out.println(""); this.key = k; } public Key getKey(){ return key; } public String criptaPassword(String password, Key key) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException{ // -------- creazione Cifratore ----------------- System.out.println("Generazione del Cipher per l'algoritmo prescelto"); Cipher des = null; try { des = Cipher.getInstance("DES"); }catch(Exception e){ e.printStackTrace(); } // -------- cifratura ------------------------------------ byte[] dataPsw = password.getBytes("utf-8"); System.out.println("Messaggio in chiaro: "); for (int i=0; i<dataPsw.length; i++) System.out.print("" + dataPsw[i] + "\t"); System.out.println(""); // ----- inizializzazione per cifratura -------- des.init(Cipher.ENCRYPT_MODE, key); System.out.println("Cipher inizializzato per cifratura"); // -------- cifratura ------------------- byte[] dataPsw_criptata = des.doFinal(dataPsw); String psw_criptata = new String(dataPsw_criptata); System.out.println(""); return psw_criptata; } public String decriptPassword(String password_criptata, Key key){ // -------- creazione Cifratore ----------------- System.out.println("Generazione del Cipher per l'algoritmo prescelto"); Cipher des = null; try { des = Cipher.getInstance("DES"); }catch(Exception e){ e.printStackTrace(); } try{ // ----- inizializzazione per decifratura -------- des.init(Cipher.DECRYPT_MODE, key); System.out.println("Cipher inizializzato per decifratura"); // -------- decifratura ---------------- byte[] newdata_psw = password_criptata.getBytes(); byte[] dataPsw_decriptata = des.doFinal(newdata_psw); System.out.println("Messaggio decifrato: "); String psw_decriptata = new String(dataPsw_decriptata); System.out.println(""); return psw_decriptata; }catch (BadPaddingException e) { e.printStackTrace(); System.out.println("Bad Padding"); }catch (InvalidKeyException e) { e.printStackTrace(); System.out.println("Chiave non valida"); }catch (IllegalBlockSizeException e) { e.printStackTrace(); System.out.println("Dimensione del blocco illegale"); } return null; } }
L'eccezione è la seguente:codice:des.doFinal(newdata_psw);
Su internet ho trovato che può dipendere dal fatto che converto una stringa in un array di byte, ma non riesco a trovare una soluzione....come sempre!!!!!codice:javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.SunJCE_h.b(DashoA12275) at com.sun.crypto.provider.SunJCE_h.b(DashoA12275) at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA12275) at javax.crypto.Cipher.doFinal(DashoA12275) ...
![]()
![]()
![]()
![]()

Rispondi quotando