Encritación de claves

sgarcri
17 de Junio del 2009
Buenas. Tengo el siguiente problema. Desde mi aplicación java necesito acceder a determinados servicios con usuario y contraseña. Para no tener mi contraseña en plano en mi fichero de properties, la quiero guardar encriptada con AES. Mi problema me surge al desencriptar. Ya tengo el código para ello, pero necesito haber encriptado y desencriptado mi contraseña con la misma clave (ya que la contraseña encriptada estará en el properties de la aplicación y no cambiará).
Mi pregunta es ¿qué clave utilizo para que sea segura? y ¿cómo almaceno la clave para que sea seguro (en el propio código, en un properties, ....)?
Muchas gracias.

Mi código es:
public static String encriptar(String sDatos) throws Exception {
String sResultado = null;
if(LogMgr.isDebugEnabled()){
LogMgr.debug("Seguridad.encriptar >> Iniciando metodo");
}
//Establecemos el algoritmo de encriptacion
Cipher aCipher = Cipher.getInstance(InterfaceConstantes.ENCRIP_ALGORITMO);
//Establecemos la clave de encriptacion
SecretKeySpec aSecretKeySpec = new SecretKeySpec(sClave, InterfaceConstantes.ENCRIP_ALGORITMO);
//Iniciamos el encriptador
aCipher.init(Cipher.ENCRYPT_MODE, aSecretKeySpec);
//Encriptamos
byte[] btDatosEncriptados = aCipher.doFinal(sDatos.getBytes(InterfaceConstantes.CODIFICACION_TEXTO));

//Recuperamos los datos sncriptados en un String
//BASE64Encoder aEncoder = new BASE64Encoder();
sResultado = new String(Base64.encodeBase64(btDatosEncriptados)).replaceAll("rn", "");
if(LogMgr.isDebugEnabled()){
LogMgr.debug("Seguridad.encriptar >> Fin metodo");
}
return sResultado;
}
public static String desencriptar(String sDatosEncriptados) throws Exception {
String sResultado = null;
if(LogMgr.isDebugEnabled()){
LogMgr.debug("Seguridad.desencriptar >> Iniciando metodo");
}

//BASE64Decoder aDecoder = new BASE64Decoder();
//Recuperamos datos encriptados en array de bytes
byte[] btDatosEncriptados = Base64.decodeBase64(sDatosEncriptados.getBytes());
//byte[] btDatosEncriptados = aDecoder.decodeBuffer(sDatosEncriptados);
//Establecemos algoritmo de encriptacion
Cipher aCipher = Cipher.getInstance(InterfaceConstantes.ENCRIP_ALGORITMO);
//Establecemos la clave de encriptacion
SecretKeySpec aSecretKeySpec = new SecretKeySpec(sClave, InterfaceConstantes.ENCRIP_ALGORITMO);
//Inicializamos el encriptador
aCipher.init(Cipher.DECRYPT_MODE, aSecretKeySpec);
//Encriptamos los datos
byte[] raw = aCipher.doFinal(btDatosEncriptados);
//Pasamos resultado a String
sResultado = new String(raw, InterfaceConstantes.CODIFICACION_TEXTO);

if(LogMgr.isDebugEnabled()){
LogMgr.debug("Seguridad.desencriptar >> Fin metodo");
}

return sResultado;
}