There are three ways for encryption/decryption using symmetric key in java.
1. Generating Symmetric key using Cryptop Library pro-grammatically. Refer Java Symmetric Key Encryption Crypto Library
2. Generate Symmetric Key using Key Tool. Current blog.
3. Use plain text as a symmetric key. Refer Java Symmetric Key Encryption using KeyTool
In this blog we will generate the symmetric key using Java KeyTool program. For more information on Key Tool read blog Java Key tool Tutorial. And then we will encrypt the data using this symmetric key.
To understand the concepts of symmetric/asymmetric key encryption read blog Java Security.
Below video explains the mechanism of symmetric key Encryption
Generate Keystore with symmetric key
This will ask for password for keystore, enter 'password'. Then it will ask for key password, enter 'password'. A file will be generate named mykeystore.jks
The above command will create a keystore with a private key called mykey. Both keystore and private key can be accessed using a password. Below diagram illustrates the same.
The above command uses AES algorithm to generate the symmetric key. There are other algorithm as well like DES (56), DESede (168), HmacSHA1, HmacSHA256.
AES is Advanced Encryption System algorithm. The data will be encrypted using this Algorithm. The key size mentioned in 128, so the generated key will be of 128 bit. The key size can be 128,192,256 according to the AES specification.
Store type used is jceks which stands for Java Cryptography Extension. The other store type that can be used is jks which is Java Key Store.
For a maven project you will need the apache-common-codec jar as a dependency or else just download the jar and paste it in the folder which is in the classpath.
Maven dependency:
Also place the above generated symmetric key at the root folder of the project.
Java Code
Output
You can get the source code from
For more on Encryption/Decryption, read below blogs.
1. Generating Symmetric key using Cryptop Library pro-grammatically. Refer Java Symmetric Key Encryption Crypto Library
2. Generate Symmetric Key using Key Tool. Current blog.
3. Use plain text as a symmetric key. Refer Java Symmetric Key Encryption using KeyTool
In this blog we will generate the symmetric key using Java KeyTool program. For more information on Key Tool read blog Java Key tool Tutorial. And then we will encrypt the data using this symmetric key.
To understand the concepts of symmetric/asymmetric key encryption read blog Java Security.
Below video explains the mechanism of symmetric key Encryption
Generate Keystore with symmetric key
keytool -genseckey -alias mykey -keyalg AES -keysize 128 -storetype jceks -keystore mykeystore.jks
This will ask for password for keystore, enter 'password'. Then it will ask for key password, enter 'password'. A file will be generate named mykeystore.jks
The above command will create a keystore with a private key called mykey. Both keystore and private key can be accessed using a password. Below diagram illustrates the same.
The above command uses AES algorithm to generate the symmetric key. There are other algorithm as well like DES (56), DESede (168), HmacSHA1, HmacSHA256.
AES is Advanced Encryption System algorithm. The data will be encrypted using this Algorithm. The key size mentioned in 128, so the generated key will be of 128 bit. The key size can be 128,192,256 according to the AES specification.
Store type used is jceks which stands for Java Cryptography Extension. The other store type that can be used is jks which is Java Key Store.
For a maven project you will need the apache-common-codec jar as a dependency or else just download the jar and paste it in the folder which is in the classpath.
Maven dependency:
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.8</version> </dependency>
Also place the above generated symmetric key at the root folder of the project.
Java Code
import java.io.FileInputStream; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.Key; import java.security.KeyStore; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class SymmetricKeyWithKeyTool { public static void main(String[] args) { try { KeyStore keyStore = KeyStore.getInstance("JCEKS"); FileInputStream stream = new FileInputStream("mykeystore.jks"); keyStore.load(stream, "password".toCharArray()); Key key = keyStore.getKey("mykey", "password".toCharArray()); String data="ABC"; //Encrypt Data String encryptedData = encryptWithAESKey(data, key.getEncoded()); System.out.println("Encrypted Data : " + encryptedData); //Decrypt Data System.out.println("Decrypted Data : " +decryptWithAESKey(encryptedData, key.getEncoded())); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static String encryptWithAESKey(String data, byte[] key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException { SecretKey secKey = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, secKey); byte[] newData = cipher.doFinal(data.getBytes()); return Base64.encodeBase64String(newData); } public static String decryptWithAESKey(String inputData, byte[] key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { Cipher cipher = Cipher.getInstance("AES"); SecretKey secKey = new SecretKeySpec(key, "AES"); cipher.init(Cipher.DECRYPT_MODE, secKey); byte[] newData = cipher.doFinal(Base64.decodeBase64(inputData.getBytes())); return new String(newData); } }
Output
Encrypted Data : zavs8vg2y6iqsr+9budWuw== Decrypted Data : ABC
You can get the source code from

For more on Encryption/Decryption, read below blogs.
- With Keytool
- Without Keytool
Click Here for Core Java Objective Questions and Answers
very helpful....Thank you very much
ReplyDeleteSAS training institute in noida
ReplyDeletephp training institute in noida
linux training institute in noida
cloud Computing Training in Noida
hadoop training institute in noida
Oracle DBA online training in India
ReplyDeleteNEW YEAR OFFERS 2018
ReplyDeleteFlipkart New Year Offers on Mobile Phones
Ebay New Year Offers On Mobile Phones
This comment has been removed by the author.
ReplyDelete