Hoje o assunto é criptografia de dados com Java. O algoritmo criptográfico que vamos utilizar é o RCA ( link ) e é um algoritmo de chaves assimétricas ( link ). Não vou explicar sobre o que é chaves assimétricas ou o algoritmo RCA porque nos links está muito bem desenvolvido. Vou demonstrar como fazer de forma absurdamente simples a implementação desse algoritmo em Java usando a JCA, que é uma API de criptografia de dados embutida no Java SE. Vamos ao código:
Imports necessários:
import java.security.*;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
... código:
... fim do código
Como vocês podem observar o input dos dados é em array de bytes e o output de dados também é em array de bytes. Para transformar em string é só fazer :
System.out.println(new String(resultadoCriptografico));
System.out.println(new String(resultadoDescriptografico));
Esse é um começo de estudo sobre criptografia de dados. Espero ter ajudado no começo dessa jornada.
Fim.
... código:
//só para fins de estudoSystem.out.println("~~~~ TESTES RSA CRYPTOGRAPH ~~~~~~~~~~~");
KeyPairGenerator keyPairGenerator= KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024); // gera a "complexidade" do par de chaves auto geradas
KeyPair kp = keyPairGenerator.genKeyPair(); instancia o par de chaves
PublicKey puKey = kp.getPublic();
PrivateKey priKey = kp.getPrivate();
String text = "mensagem a ser criptografada";
Cipher cipher1 = Cipher.getInstance("RSA"); // instância do objeto que faz a criptografia.
cipher1.init(Cipher.ENCRYPT_MODE, puKey ; // inicializa esse objeto no modo desejado (nesse caso no modo de encriptação de dados)
byte[] resultadoCriptografico = cipher1.doFinal(text.getBytes()); // doFinal() é o método que de fato faz a criptografia e devolve um array de bytes criptografados com a chave pública que você enviou como parâmetro no init()
cipher1.init(Cipher.DECRYPT_MODE, priKey ; // nesse tipo de algoritmo você sempre criptografa com a chave pública e descriptografa com a chave primária.
byte[] resultadoDescriptografico = cipher1.doFinal(x);
... fim do código
Como vocês podem observar o input dos dados é em array de bytes e o output de dados também é em array de bytes. Para transformar em string é só fazer :
System.out.println(new String(resultadoCriptografico));
System.out.println(new String(resultadoDescriptografico));
Esse é um começo de estudo sobre criptografia de dados. Espero ter ajudado no começo dessa jornada.
Fim.
Nenhum comentário:
Postar um comentário