Criptografia Java - descriptografando dados

Você pode descriptografar os dados criptografados usando a classe Cipher do javax.cryptopacote. Siga as etapas abaixo para descriptografar os dados fornecidos usando Java.

Etapa 1: Crie um objeto KeyPairGenerator

o KeyPairGenerator classe fornece getInstance() método que aceita uma variável String que representa o algoritmo de geração de chave necessário e retorna um objeto KeyPairGenerator que gera chaves.

Crio KeyPairGenerator objeto usando o getInstance() método conforme mostrado abaixo.

//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");

Etapa 2: inicializar o objeto KeyPairGenerator

o KeyPairGenerator classe fornece um método chamado initialize()este método é usado para inicializar o gerador de par de chaves. Este método aceita um valor inteiro que representa o tamanho da chave.

Inicialize o objeto KeyPairGenerator criado na etapa anterior usando o initialize() método conforme mostrado abaixo.

//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);

Etapa 3: gerar o KeyPairGenerator

Você pode gerar o KeyPair usando o generateKeyPair() método do KeyPairGeneratorclasse. Gere o par de chaves usando este método, conforme mostrado abaixo.

//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();

Etapa 4: Obtenha a chave pública

Você pode obter a chave pública do objeto KeyPair gerado usando o getPublic() método conforme mostrado abaixo.

//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();

Etapa 5: Criar um objeto Cipher

o getInstance() método de Cipher classe aceita uma variável String que representa a transformação necessária e retorna um objeto Cipher que implementa a transformação fornecida.

Crie o objeto Cipher usando o getInstance() método conforme mostrado abaixo.

//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

Etapa 6: inicializar o objeto Cipher

o init() método da classe Cipher aceita dois parâmetros

  • Um parâmetro inteiro que representa o modo de operação (criptografar / descriptografar)
  • Objeto de chave que representa a chave pública

Inicialize o objeto Cypher usando o init() método conforme mostrado abaixo.

//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);

Etapa 7: Adicionar dados ao objeto Cipher

o update() O método da classe Cipher aceita uma matriz de bytes que representa os dados a serem criptografados e atualiza o objeto atual com os dados fornecidos.

Atualize o objeto Cipher inicializado passando os dados para o update() método na forma de matriz de bytes, conforme mostrado abaixo.

//Adding data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();	  
cipher.update(input);

Etapa 8: criptografar os dados

o doFinal()método da classe Cipher completa a operação de criptografia. Portanto, conclua a criptografia usando este método conforme mostrado abaixo.

//Encrypting the data
byte[] cipherText = cipher.doFinal();

Etapa 9: inicializar o objeto Cipher para descriptografia

Para descriptografar a cifra criptografada nas etapas anteriores, você precisa inicializá-la para descriptografia.

Portanto, inicialize o objeto de cifra passando os parâmetros Cipher.DECRYPT_MODE e objeto PrivateKey conforme mostrado abaixo.

//Initializing the same cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());

Etapa 10: descriptografar os dados

Finalmente, descriptografe o texto criptografado usando o doFinal() método conforme mostrado abaixo.

//Decrypting the text
byte[] decipheredText = cipher.doFinal(cipherText);

Exemplo

O programa Java seguinte aceita o texto do usuário, criptografa-o usando o algoritmo RSA e, imprime a cifra do texto fornecido, descriptografa a cifra e imprime o texto descriptografado novamente.

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;

import javax.crypto.Cipher;

public class CipherDecrypt {
   public static void main(String args[]) throws Exception{
	   //Creating a Signature object
      Signature sign = Signature.getInstance("SHA256withRSA");
      
      //Creating KeyPair generator object
      KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
      
      //Initializing the key pair generator
      keyPairGen.initialize(2048);
      
      //Generate the pair of keys
      KeyPair pair = keyPairGen.generateKeyPair();   
      
      //Getting the public key from the key pair
      PublicKey publicKey = pair.getPublic();  

      //Creating a Cipher object
      Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

      //Initializing a Cipher object
      cipher.init(Cipher.ENCRYPT_MODE, publicKey);
	  
      //Add data to the cipher
      byte[] input = "Welcome to Tutorialspoint".getBytes();	  
      cipher.update(input);
	  
      //encrypting the data
      byte[] cipherText = cipher.doFinal();	 
      System.out.println( new String(cipherText, "UTF8"));

      //Initializing the same cipher for decryption
      cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());
      
      //Decrypting the text
      byte[] decipheredText = cipher.doFinal(cipherText);
      System.out.println(new String(decipheredText));
   }
}

Resultado

O programa acima gera a seguinte saída -

Encrypted Text:
]/[?F3?D?p
v?w?!?H???^?A??????P?u??FA?
?
???_?? ???_jMH-??>??OP?'?j?_?n`
?_??'`????o??_GL??g???g_f?????f|???LT?|?Vz_TDu#??\?<b,,?$C2???Bq?#?lDB`??g,^??K?_?v???`}
?;LX?a?_5e???#???_?6?/B&B_???^?__Ap^#_?q?IEh????_?,??*??]~_?_?D?
_y???lp??a?P_U{

Decrypted Text:
Welcome to Tutorialspoint