Tutorial with code : Symmetric-key Encryption and Decryption in Java
UPDATED: 24 August 2013
Tags:
Security
This article falls into the category `Security`. Security fade in when you are dealing with some confidential data of client or say user(s). This will provide basic security for your data. Use `Digital Certificate(s)` for strong Asymmetric Encryption / Decryption.
What is Symmetric-key Encryption and Decryption?
Symmetric-key are cryptography algorithm(s). It uses same key for encryption and decryption of text.
Let's take a look at the code and understand it in better way.
![]() |
| Symmetric key , Image courtesy: Microsoft |
What is Symmetric-key Encryption and Decryption?
Symmetric-key are cryptography algorithm(s). It uses same key for encryption and decryption of text.
Let's take a look at the code and understand it in better way.
package com.javaquery.security;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Symmetric {
private String AlphaNum = "A1B2C%D3EF)GH5IJ4K6L9MN7OP0QRS8TUVWXYZa!bc@de$fg#hij&k*l(m-n_op+q{r][st}u:v;w,x.?";
/**
* Encrypt the text using `SecretKey`
* @param originalText
* @param SecretKey
* @return String
*/
public String symmetricEncryption(String originalText, String SecretKey){
byte[] raw;
String encryptedString = null;
BASE64Decoder decoder = new BASE64Decoder();
BASE64Encoder bASE64Encoder = new BASE64Encoder();
SecretKeySpec skeySpec;
Cipher cipher;
if (originalText != null && SecretKey != null) {
try {
byte[] encryptText = originalText.getBytes();
raw = decoder.decodeBuffer(SecretKey);
skeySpec = new SecretKeySpec(raw, "AES");
cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
encryptedString = bASE64Encoder.encode(cipher.doFinal(encryptText));
} catch (Exception e) {
e.printStackTrace();
}
}
return encryptedString;
}
/**
* Decrypt the encrypted text using same `SecretKey`
* @param Encryptedtext
* @param SecretKey
* @return String
*/
public String symmetricDecryption(String Encryptedtext, String SecretKey){
String decryptedString = null;
byte[] encryptText;
byte[] raw;
BASE64Decoder decoder = new BASE64Decoder();
BASE64Decoder base64Decoder = new BASE64Decoder();
Cipher cipher;
SecretKeySpec skeySpec;
if (Encryptedtext != null && SecretKey != null) {
try {
raw = decoder.decodeBuffer(SecretKey);
skeySpec = new SecretKeySpec(raw, "AES");
encryptText = base64Decoder.decodeBuffer(Encryptedtext);
cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
decryptedString = new String(cipher.doFinal(encryptText));
} catch (Exception e) {
e.printStackTrace();
}
}
return decryptedString;
}
/**
* Generate random text/string of 200 characters
* @return String
*/
public String generateData() {
String Randomline = new String();
Random rand = new Random();
char tokenChar = '\000';
for (int i = 0; i < 200; i++) {
tokenChar = AlphaNum.charAt(rand.nextInt(AlphaNum.length()));
Randomline = Randomline + tokenChar;
}
return Randomline;
}
/**
* Generate Secret Key using javax.crypto.KeyGenerator class
* @return String
*/
public String getSecretKey() {
KeyGenerator keyGen;
String strSecretkey = null;
try {
keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretkey = keyGen.generateKey();
BASE64Encoder encode = new BASE64Encoder();
strSecretkey = encode.encode(secretkey.getEncoded());
} catch (Exception e) {
e.printStackTrace();
}
return strSecretkey;
}
public static void main(String[] args) {
Symmetric sTest = new Symmetric();
String SecretKey = sTest.getSecretKey();
String OriginalText = sTest.generateData();
/**
* You are adviced to check/validate null values before
* using this piece of code for real time application
*/
System.out.println("Secret Key:"+SecretKey);
System.out.println("Original Data:"+OriginalText);
String encrypt = sTest.symmetricEncryption(OriginalText,SecretKey);
System.out.println("Encrypted text:"+encrypt);
String decrypt = sTest.symmetricDecryption(encrypt,SecretKey);
System.out.println("Decrypted text:"+decrypt);
}
}
Tags:
Security

0 comments :