Encritaci贸n de claves
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;
}
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;
}