Hi,

After a long time, during which I was very busy by my personal project (building my house), I am come back with a simple article concerning the encrypting of message via the standard Cipher class. This class provides the functionality of a cryptographic cipher for encryption and decryption. It forms the core of the Java Cryptographic Extension (JCE) framework.

In the following example, I will encrypt and decrypt a message via the symmetric algorithm “AES/ECB/PKCS5Padding” (via a secret key). A transformation is of the form “algorithm/mode/padding” or “algorithm”.

package com.ho.crypto.test1;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Random;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;


/**
 * Encrypt / Decrypt your message with Cipher Class.
 * @author huseyin
 *
 */
public class MyProtectorSingleton {

	
		// --------------------------------- PRIVATE ATTRIBUTES
		private static MyProtectorSingleton instance = null;
		
		private SecretKeySpec certificate = null;
		private Cipher aesEncrypt = null;
		private Cipher aesDecrypt = null;
		
		// ----------------------------------- CONSTRUCTORS
		private MyProtectorSingleton() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException{
			Random myRandom = new Random();
			byte[] myBytesArray = new byte[16];
			myRandom.nextBytes(myBytesArray);
			certificate = new SecretKeySpec(myBytesArray, 0, 16, "AES");
			
			aesEncrypt = Cipher.getInstance("AES/ECB/PKCS5Padding");
			aesEncrypt.init(Cipher.ENCRYPT_MODE, certificate);
			
			aesDecrypt = Cipher.getInstance("AES/ECB/PKCS5Padding");
			aesDecrypt.init(Cipher.DECRYPT_MODE,certificate);
		}
		
		public static synchronized MyProtectorSingleton getInstance() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException{
			if(instance == null){
				instance = new MyProtectorSingleton();
			}
			return instance;
		}
		
		// ----------------------------- PUBLIC FUNCTIONS
		public byte[] protect(String toProtect) throws IllegalBlockSizeException, BadPaddingException{
			byte[] cipherText = aesEncrypt.doFinal(toProtect.getBytes());
			return cipherText;
		}
		
		public String unprotect(byte[] toUnprotect) throws IllegalBlockSizeException, BadPaddingException{
			String cleartext = new String(aesDecrypt.doFinal(toUnprotect));
			return cleartext;
		}
		
		public static void main(String[] args) {
			try{
				String toProtect = "this is my message";
				MyProtectorSingleton myProtector = MyProtectorSingleton.getInstance();
				
				//
				byte[] msgProtected = myProtector.protect(toProtect);
				System.out.println("msgProtected="+msgProtected);
				
				// 
				String str = myProtector.unprotect(msgProtected);
				System.out.println(str);
			}catch(Exception ex){
				ex.printStackTrace();
			}
		}
}

That’s all!!!!

Kind regards,

Huseyin OZVEREN