Site icon

Encrypt Decrypt message using AES-128 CBC in java (with example)

Given a message, We would like to encrypt & decrypt plain/cipher text using AES CBC algorithm in java. We will perform following operations:

Program to encrypt & decrypt message in java: 

package org.learn;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class CryptoMngr {
	
	public static String ALGORITHM = "AES";
	private static String AES_CBS_PADDING = "AES/CBC/PKCS5Padding";

	public static byte[] encrypt(final byte[] key, final byte[] IV, final byte[] message) throws Exception {
		return CryptoMngr.encryptDecrypt(Cipher.ENCRYPT_MODE, key, IV, message);
	}

	public static byte[] decrypt(final byte[] key, final byte[] IV, final byte[] message) throws Exception {
		return CryptoMngr.encryptDecrypt(Cipher.DECRYPT_MODE, key, IV, message);
	}

	private static byte[] encryptDecrypt(final int mode, final byte[] key, final byte[] IV, final byte[] message)
			throws Exception {
		final Cipher cipher = Cipher.getInstance(AES_CBS_PADDING);
		final SecretKeySpec keySpec = new SecretKeySpec(key, ALGORITHM);
		final IvParameterSpec ivSpec = new IvParameterSpec(IV);
		cipher.init(mode, keySpec, ivSpec);
		return cipher.doFinal(message);
	}
}

CryptoMngrClient Class: CryptoMngrClient class will generate random input message and will invoke CryptoMngr to encrypt & decrypt input message.

package org.learn;

import java.util.Base64;
import java.util.UUID;

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class CryptoMngrClient {

	private static int AES_128 = 128;

	public static void main(String[] args) throws Exception {
		
		KeyGenerator keyGenerator = KeyGenerator.getInstance(CryptoMngr.ALGORITHM);
		keyGenerator.init(AES_128);
		//Generate Key
		SecretKey key = keyGenerator.generateKey();
		//Initialization vector
		SecretKey IV = keyGenerator.generateKey();

		String randomString = UUID.randomUUID().toString().substring(0, 16);
		System.out.println("1. Message to Encrypt: " + randomString);
		
		byte[] cipherText = CryptoMngr.encrypt(key.getEncoded(), IV.getEncoded(), randomString.getBytes());
		System.out.println("2. Encrypted Text: " + Base64.getEncoder().encodeToString(cipherText));
		
		byte[] decryptedString = CryptoMngr.decrypt(key.getEncoded(), IV.getEncoded(), cipherText);
		System.out.println("3. Decrypted Message : " + new String(decryptedString));
	}
}

Program output to encrypt & decrypt to / from plain text is java:

1. Message to Encrypt: d6d0c0d9-a53c-42
2. Encrypted Text: hdZSyZiTq8t0FCifdgH0mqw0inpyZKLdGpbRgKjPUdA=
3. Decrypted Message : d6d0c0d9-a53c-42
Exit mobile version