Encriptaci贸n con DES

dduran
07 de Agosto del 2008
Buenas disculpen tengo un serio problema en el momento de encriptar un mensaje utilizando el algoritmo DES, el asunto es que encripto con una llave y deseo desencriptar con otra llave diferente, a煤n cuando estoy conciente de que el resultado que voy a obtener no es el correcto, necesito realizar esta prueba pero al momento de aplicar el doFinal me arroja la siguiente excepci贸n BadPaddingExcepcion esto no deber铆a suceder porque se supone que cada m茅todo(Encriptar y Desencriptar) son independientes el uno del otro, cuando realizo la desencriptaci贸n utilizando la misma llave con la que encript茅 no me da ning煤n tipo de errores he estado investigando sobre este error y java lanza esta excepci贸n cuando un particular mecanismo de relleno se espera para los datos de entrada, pero los datos no se rellenan correctamente. En realidad he realizado muchas pruebas pero no logro encontrar la soluci贸n. A continuaci贸n les env铆o los 2 m茅todos que estoy empleando para ver si alguien me puede ayudar con este asunto.

public static String encriptar(String UsID, String PssID) {
byte[] SALT_BYTES ={(byte)0x1F, (byte)0xC2, (byte)0xD3, (byte)0xAB,
(byte)0x4C, (byte)0xC5, (byte)0xAA, (byte)0x6E};

String passPhrase = "q#df-3op";
Cipher ecipher = null;
try {
// Crear la key
SecretKeySpec key = new SecretKeySpec(SALT_BYTES,"DES");
// Crear el cipher o cifrado
ecipher = Cipher.getInstance("DES");
ecipher.init(Cipher.ENCRYPT_MODE,key);
}
catch (Exception e) {
System.err.println("Error en Exception : "+e);
e.printStackTrace();
}
try {
// Encodear la cadena a bytes usando utf-8
String concatenar = PssID+passPhrase+UsID+passPhrase;
byte[] utf8 = concatenar.getBytes("UTF8");// Encriptar
byte[] enc = ecipher.doFinal(utf8);
// Encodear bytes a base64 para obtener cadena
return new sun.misc.BASE64Encoder().encode(enc);
}
catch (Exception e) {
System.err.println("Error en Exception : "+e);
e.printStackTrace();
}
return null;
}
public static String desencriptar(String PssID) {

byte[] SALT_BYTES = {(byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,(byte)0x56, (byte)0x35, (byte)0xE3, (byte)0x03};
String passPhrase = "q#df-3op";
Cipher decipher = null;
SecretKey llave ;


try {
// Crear la key
SecretKeySpec key = new SecretKeySpec(SALT_BYTES,"DES");
// Crear el cipher o cifrado
decipher = Cipher.getInstance("DES");
decipher.init(Cipher.DECRYPT_MODE,key);
}catch(NoSuchAlgorithmException e){}
catch (Exception e) {
System.err.println("Error en Exception : "+e);
e.printStackTrace();
}
try {
byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(PssID);// Decodear base64 y obtener bytes
byte[] utf8 = decipher.doFinal(dec);// Desencriptar//Aqui revienta la excepci贸n

String resultado1 = new String(utf8, "UTF8");// Decodear usando utf-8
// Retornando solo la clave del String resultado
String [] tipo = resultado1.split(passPhrase);
String resultado = tipo[0];
return resultado;
}
catch(BadPaddingException e) {

System.out.println(e.getMessage()+"//"+e.getCause() );
}
catch (Exception e) {
System.err.println("Error en Exception : "+e);
e.printStackTrace();
}
return null;
}

Cuando realiz贸 la prueba la clave que me encript贸 el primer m茅todo se la paso al segundo m茅todo y es cuando me arroja la excepci贸n.