java - murcielago - codigo de encriptacion aes
Problema de cifrado AES 256 (1)
Si desea utilizar el cifrado AES 256, debe instalar los archivos de la Política de Jurisdicción de Fuerza Ilimitada:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
Esto permite mayores niveles de encriptación como AES 256 y RSA 2048.
Reemplace los archivos del zip con los actuales en <java-home>/lib/security
.
El siguiente código implementa perfectamente el cifrado / descifrado AES-128.
public static void main(String[] args) throws Exception
{
String input = JOptionPane.showInputDialog(null, "Enter your String");
System.out.println("Plaintext: " + input + "/n");
// Generate a key
KeyGenerator keygen = KeyGenerator.getInstance("AES");
keygen.init(128);
byte[] key = keygen.generateKey().getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
// Generate IV randomly
SecureRandom random = new SecureRandom();
byte[] iv = new byte[16];
random.nextBytes(iv);
IvParameterSpec ivspec = new IvParameterSpec(iv);
// Initialize Encryption Mode
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivspec);
// Encrypt the message
byte[] encryption = cipher.doFinal(input.getBytes());
System.out.println("Ciphertext: " + encryption + "/n"); //
// Initialize the cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec);
// Decrypt the message
byte[] decryption = cipher.doFinal(encryption);
System.out.println("Plaintext: " + new String(decryption) + "/n");
}
Cuando quiero usar AES-256, pensé que se podía hacer modificando keygen.init(256);
y byte[] iv = new byte[32];
, sin embargo, esto se convierte en error (Excepción en el hilo "principal" java.security.InvalidKeyException: Tamaño de clave ilegal)! ¿Alguien puede explicar por qué ocurre un error cuando realicé estas dos modificaciones y qué debería hacer? Gracias chicos :)