Cryptographie Java - Décryptage des données

Vous pouvez déchiffrer les données chiffrées à l'aide de la classe Cipher du javax.cryptopaquet. Suivez les étapes ci-dessous pour décrypter les données données à l'aide de Java.

Étape 1: créer un objet KeyPairGenerator

le KeyPairGenerator classe fournit getInstance() qui accepte une variable String représentant l'algorithme de génération de clé requis et renvoie un objet KeyPairGenerator qui génère des clés.

Créer KeyPairGenerator objet utilisant le getInstance() méthode comme indiqué ci-dessous.

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

Étape 2: initialiser l'objet KeyPairGenerator

le KeyPairGenerator classe fournit une méthode nommée initialize()cette méthode est utilisée pour initialiser le générateur de paires de clés. Cette méthode accepte une valeur entière représentant la taille de la clé.

Initialisez l'objet KeyPairGenerator créé à l'étape précédente à l'aide du initialize() méthode comme indiqué ci-dessous.

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

Étape 3: générer le KeyPairGenerator

Vous pouvez générer le KeyPair en utilisant le generateKeyPair() méthode de la KeyPairGeneratorclasse. Générez la paire de clés en utilisant cette méthode comme indiqué ci-dessous.

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

Étape 4: Obtenez la clé publique

Vous pouvez obtenir la clé publique de l'objet KeyPair généré à l'aide du getPublic() méthode comme indiqué ci-dessous.

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

Étape 5: créer un objet Cipher

le getInstance() méthode de Cipher class accepte une variable String représentant la transformation requise et renvoie un objet Cipher qui implémente la transformation donnée.

Créez l'objet Cipher à l'aide du getInstance() méthode comme indiqué ci-dessous.

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

Étape 6: Initialisez l'objet Cipher

le init() La méthode de la classe Cipher accepte deux paramètres

  • Un paramètre entier représentant le mode de fonctionnement (chiffrer / déchiffrer)
  • Objet clé représentant la clé publique

Initialisez l'objet Cypher à l'aide du init() méthode comme indiqué ci-dessous.

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

Étape 7: Ajouter des données à l'objet Cipher

le update() La méthode de la classe Cipher accepte un tableau d'octets représentant les données à chiffrer et met à jour l'objet courant avec les données fournies.

Mettez à jour l'objet Cipher initialisé en transmettant les données au update() sous la forme d'un tableau d'octets comme indiqué ci-dessous.

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

Étape 8: Crypter les données

le doFinal()La méthode de la classe Cipher termine l'opération de chiffrement. Par conséquent, terminez le cryptage en utilisant cette méthode comme indiqué ci-dessous.

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

Étape 9: Initialisez l'objet Cipher pour le déchiffrement

Pour déchiffrer le chiffrement chiffré dans les étapes précédentes, vous devez l'initialiser pour le déchiffrement.

Par conséquent, initialisez l'objet de chiffrement en passant les paramètres Cipher.DECRYPT_MODE et l'objet PrivateKey comme indiqué ci-dessous.

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

Étape 10: décrypter les données

Enfin, décryptez le texte chiffré à l'aide du doFinal() méthode comme indiqué ci-dessous.

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

Exemple

Le programme Java suivant accepte le texte de l'utilisateur, le crypte à l'aide de l'algorithme RSA et, imprime le chiffre du texte donné, déchiffre le chiffre et imprime à nouveau le texte décrypté.

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

Production

Le programme ci-dessus génère la sortie suivante -

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