Encriptar y desencriptar con AES y llave simétrica. En este caso se emplea AES-256, por lo que deberemos tener una clave de largo 32 (32 * 8 = 256).
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class Probador {
public static void main(String[] args) {
// llaveSimetrica es un String de largo múltiplo de 8
// en este caso si es de largo 32 nos permite AES-256 (32 * 8)
String llaveSimetrica = "holamundocruel12holamundocruel12";
SecretKeySpec key = new SecretKeySpec(llaveSimetrica.getBytes(), "AES");
Cipher cipher;
try {
cipher = Cipher.getInstance("AES");
//Comienzo a encriptar
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] campoCifrado = cipher.doFinal("mensaje_secreto".getBytes());
/*
* TODO: Representar los bytes como string vía base64, así será
* humanamente leíble. La otra opción es expresar como hexadecimal
*
* En este caso lo imprimo en pantalla como bytes.
*/
System.out.println(new String(campoCifrado));
//Comienzo a desencriptar
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] datosDecifrados = cipher.doFinal(campoCifrado);
String mensaje_original = new String(datosDecifrados);
System.out.println(mensaje_original);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Actualización 19/04/2013:
Olvidé indicar que para emplear criptografía fuerte, por ejemplo AES-256, deben instalar Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files.
En caso que no deseen hacerlo, pueden usar el ejemplo anterior con AES-128, la cual emplea una llave de largo 16 (16*8 = 128).