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