Ciao....no, ancora nn ho risolto...
Il problema è sempre lo stesso: criptare e decriptare un psw.
Adesso sto usando questa classe:
codice:
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;
}
}
e mi lancia eccezione qui
codice:
des.doFinal(newdata_psw);
L'eccezione è la seguente:
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)
...
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!!!!!