Crittografia Java - Decrittografia dei dati

È possibile decrittografare i dati crittografati utilizzando la classe Cipher di javax.cryptopacchetto. Seguire i passaggi indicati di seguito per decrittografare i dati forniti utilizzando Java.

Passaggio 1: crea un oggetto KeyPairGenerator

Il KeyPairGenerator classe fornisce getInstance() che accetta una variabile String che rappresenta l'algoritmo di generazione delle chiavi richiesto e restituisce un oggetto KeyPairGenerator che genera le chiavi.

Creare KeyPairGenerator oggetto utilizzando il getInstance() metodo come mostrato di seguito.

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

Passaggio 2: inizializza l'oggetto KeyPairGenerator

Il KeyPairGenerator class fornisce un metodo denominato initialize()questo metodo viene utilizzato per inizializzare il generatore di coppie di chiavi. Questo metodo accetta un valore intero che rappresenta la dimensione della chiave.

Inizializza l'oggetto KeyPairGenerator creato nel passaggio precedente utilizzando l'estensione initialize() metodo come mostrato di seguito.

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

Passaggio 3: genera il KeyPairGenerator

Puoi generare il file KeyPair usando il generateKeyPair() metodo del KeyPairGeneratorclasse. Genera la coppia di chiavi utilizzando questo metodo come mostrato di seguito.

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

Passaggio 4: ottieni la chiave pubblica

È possibile ottenere la chiave pubblica dall'oggetto KeyPair generato utilizzando il getPublic() metodo come mostrato di seguito.

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

Passaggio 5: creare un oggetto Cipher

Il getInstance() metodo di Cipher class accetta una variabile String che rappresenta la trasformazione richiesta e restituisce un oggetto Cipher che implementa la trasformazione data.

Crea l'oggetto Cipher usando il getInstance() metodo come mostrato di seguito.

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

Passaggio 6: inizializza l'oggetto Cipher

Il init() metodo della classe Cipher accetta due parametri

  • Un parametro intero che rappresenta la modalità operativa (crittografa / decrittografa)
  • Oggetto chiave che rappresenta la chiave pubblica

Inizializza l'oggetto Cypher usando il init() metodo come mostrato di seguito.

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

Passaggio 7: aggiungere dati all'oggetto Cipher

Il update() Il metodo della classe Cipher accetta un array di byte che rappresenta i dati da crittografare e aggiorna l'oggetto corrente con i dati forniti.

Aggiorna l'oggetto Cipher inizializzato passando i dati al file update() metodo sotto forma di array di byte come mostrato di seguito.

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

Passaggio 8: crittografa i dati

Il doFinal()metodo della classe Cipher completa l'operazione di crittografia. Pertanto, completare la crittografia utilizzando questo metodo come mostrato di seguito.

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

Passaggio 9: inizializza l'oggetto Cipher per la decrittografia

Per decrittografare la crittografia crittografata nei passaggi precedenti è necessario inizializzarla per la decrittografia.

Pertanto, inizializza l'oggetto di crittografia passando i parametri Cipher.DECRYPT_MODE e l'oggetto PrivateKey come mostrato di seguito.

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

Passaggio 10: decrittografa i dati

Infine, decrittografa il testo crittografato utilizzando il doFinal() metodo come mostrato di seguito.

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

Esempio

Il seguente programma Java accetta il testo dell'utente, lo crittografa utilizzando l'algoritmo RSA e, stampa la cifra del testo dato, decrittografa la cifra e stampa nuovamente il testo decrittografato.

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));
   }
}

Produzione

Il programma di cui sopra genera il seguente output:

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