terça-feira, 16 de julho de 2013

Criptografia de dados com Java algoritmo RCA de chaves assimétricas

Bom dia pessoal!

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:
                //só para fins de estudo
System.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