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.