Message Digest and MAC
Keys and Key Store
Generating Keys
Digital Signature
Cipher Text
Java Cryptography Resources
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
Java Cryptography - Decrypting Data
You can decrypt the encrypted data using the Cipher class of the javax.crypto package. Follow the steps given below to decrypt given data using Java.
Step 1: Create a KeyPairGenerator object
The KeyPairGenerator class provides getInstance() method which accepts a String variable representing the required key-generating algorithm and returns a KeyPairGenerator object that generates keys.
Create KeyPairGenerator object using the getInstance() method as shown below.
//Creating KeyPair generator object KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Step 2: Initiapze the KeyPairGenerator object
The KeyPairGenerator class provides a method named initiapze() this method is used to initiapze the key pair generator. This method accepts an integer value representing the key size.
Initiapze the KeyPairGenerator object created in the previous step using the initiapze() method as shown below.
//Initiapzing the KeyPairGenerator keyPairGen.initiapze(2048);
Step 3: Generate the KeyPairGenerator
You can generate the KeyPair using the generateKeyPair() method of the KeyPairGenerator class. Generate the key pair using this method as shown below.
//Generate the pair of keys KeyPair pair = keyPairGen.generateKeyPair();
Step 4: Get the pubpc key
You can get the pubpc key from the generated KeyPair object using the getPubpc() method as shown below.
//Getting the pubpc key from the key pair PubpcKey pubpcKey = pair.getPubpc();
Step 5: Create a Cipher object
The getInstance() method of Cipher class accepts a String variable representing the required transformation and returns a Cipher object that implements the given transformation.
Create the Cipher object using the getInstance() method as shown below.
//Creating a Cipher object Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Step 6: Initiapze the Cipher object
The init() method of the Cipher class accepts two parameters
An integer parameter representing the operation mode (encrypt/decrypt)
Key object representing the pubpc key
Initiapze the Cypher object using the init() method as shown below.
//Initiapzing a Cipher object cipher.init(Cipher.ENCRYPT_MODE, pubpcKey);
Step 7: Add data to the Cipher object
The update() method of the Cipher class accepts a byte array representing the data to be encrypted and updates the current object with the data given.
Update the initiapzed Cipher object by passing the data to the update() method in the form of byte array as shown below.
//Adding data to the cipher byte[] input = "Welcome to Tutorialspoint".getBytes(); cipher.update(input);
Step 8: Encrypt the data
The doFinal() method of the Cipher class completes the encryption operation. Therefore, finish the encryption using this method as shown below.
//Encrypting the data byte[] cipherText = cipher.doFinal();
Step 9: Initiapze the Cipher object for decryption
To decrypt the cypher encrypted in the previous steps you need to initiapze it for decryption.
Therefore, initiapze the cipher object by passing the parameters Cipher.DECRYPT_MODE and PrivateKey object as shown below.
//Initiapzing the same cipher for decryption cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());
Step 10: Decrypt the data
Finally, Decrypt the encrypted text using the doFinal() method as shown below.
//Decrypting the text byte[] decipheredText = cipher.doFinal(cipherText);
Example
Following Java program accepts text from user, encrypts it using RSA algorithm and, prints the cipher of the given text, decrypts the cipher and prints the decrypted text again.
import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.Signature; import javax.crypto.Cipher; pubpc class CipherDecrypt { pubpc 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"); //Initiapzing the key pair generator keyPairGen.initiapze(2048); //Generate the pair of keys KeyPair pair = keyPairGen.generateKeyPair(); //Getting the pubpc key from the key pair PubpcKey pubpcKey = pair.getPubpc(); //Creating a Cipher object Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); //Initiapzing a Cipher object cipher.init(Cipher.ENCRYPT_MODE, pubpcKey); //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")); //Initiapzing 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)); } }
Output
The above program generates the following 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 TutorialspointAdvertisements