/**
Clase de ejemplo ilustrativo para otros propósitos con:
Función para encriptación de un String mediante algoritmo AES por bloques
Autor: José Ramón Pascual
**/
package crypt;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import static org.apache.commons.codec.binary.Base64.decodeBase64;
import static org.apache.commons.codec.binary.Base64.encodeBase64;
public class Crypt {
// Algoritmo (AES, DES, RSA)
private final static String algoritmo = "AES";
// Tipo de cifrado, por bloques, padding etc.
private final static String tipoCifrado = "AES/CBC/PKCS5Padding";
/**
Función para encriptación de un String mediante algoritmo AES por bloques con los siguientes parámetros:
@param llave tipo String a utilizar
@param iv el vector de inicialización
@param texto el texto a encriptar
@return el texto cifrado en modo String codificado en base64
@throws Exception excepciones que puede devolver: NoSuchAlgorithmException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException
*/
public static String encrypt(String llave, String iv, String texto) throws Exception {
Cipher cipher = Cipher.getInstance(tipoCifrado);
SecretKeySpec secretKeySpec = new SecretKeySpec(llave.getBytes(), algoritmo);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] encrypted = cipher.doFinal(texto.getBytes());
return new String(encodeBase64(encrypted));
}
/**
Función para desencriptar un String mediante algoritmo AES por bloques con los siguientes parámetros:
@param llave tipo String a utilizar
@param iv el vector de inicialización
@param encrypted el texto a desencriptar previamente encriptado con la misma llave y codificado en base64
@return el texto descrifrado en modo String codificado en base64
@throws Exception excepciones que puede devolver: NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException
*/
public static String decrypt(String llave, String iv, String encrypted) throws Exception {
Cipher cipher = Cipher.getInstance(tipoCifrado);
SecretKeySpec secretKeySpec = new SecretKeySpec(llave.getBytes(), algoritmo);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
byte[] enc = decodeBase64(encrypted);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] decrypted = cipher.doFinal(enc);
return new String(decrypted);
}
}