Java Criptografia e Descriptografia com AES Chave Assimétrica
Bem, para quem estiver procurando um exemplo de como implementar criptografia e descriptografia em java com AES e chave assimétrica, segue um modelo simples e pratico. Se você ainda não conhece criptográfica AES confira aqui.
Nesse exemplo estaremos usando da seguinte forma:
Se o usuário informar uma chave com 32 caracteres, corresponderá a uma chave de 256 bits: AES – 256 (32 * 8 = 256);
Se o usuário informar uma chave com 24 caracteres, corresponderá a uma chave de 192 bits: AES – 256 (24 * 8 = 192);
Se o usuário informar uma chave com 16 caracteres, corresponderá a uma chave de 128 bits: AES – 256 (16 * 8 = 128);
Não irei entrar mais em detalhes pois o código está comentado.
import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class AES2 { private static String chaveSimetrica; private static String mensagem; private static SecretKey key; private static byte[] mensagemEncriptada; private static byte[] mensagemDescriptada; private static Scanner sc = new Scanner(System.in); public static void main(String args[]) { /** * Solicita ao usuário que informe uma chave com caracteres: * (256 / 8 = 32) 32 caracteres = 256 bits * (192 / 8 = 192) 24 caracteres = 192 bits * (128 / 8 = 128) 16 caracteres = 128 bits */ System.out.println("32 caracteres = chave com 256 bits"+ "\n24 caracteres = chave com 192 bits"+ "16 caracteres = chave com 128 bits"+ "\n Infomre uma Chave: "); chaveSimetrica = sc.nextLine(); key = new SecretKeySpec(chaveSimetrica.getBytes(), "AES"); try { Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, key); /* Solicita ao usuŕio que informe sua mensagem a ser encriptada */ System.out.println("Informe sua mensagem a ser encriptada: "); mensagem = sc.nextLine(); /* Encripta a Mensagem */ mensagemEncriptada = cipher.doFinal(mensagem.getBytes()); /* Exibe Mensagem Encriptada */ System.out.println(new String("Mensagem Encriptada: " + mensagemEncriptada)); /* Informa ao objeto a ação de desencriptar */ cipher.init(Cipher.DECRYPT_MODE, key); /* Recebe a mensagem encriptada e descripta */ mensagemDescriptada = cipher.doFinal(mensagemEncriptada); /** * Converte para a base 64 e amazena a mensagem em uma variavel * auxiliar */ String mensagemOriginal = new String(mensagemDescriptada); /* Exibe Mensagem Descriptada */ System.out.println("Mensagem Descriptada: " + mensagemOriginal); } catch (Exception e) { e.printStackTrace(); } } }