November 2013 Posts

A Simple AES Encryption – Decryption Using Java

Several days ago, my friend asked me how to create a simple AES encryption – decryption using java. Well, here is your answer, hope it will helped you.

package com.edw.testing;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Encoder;

public class TestingAES {

    public TestingAES() {

    private void execute() throws Exception {
        String password = "mypassword";
        String salt = "salt";
        String cipherText = "Hello, World!";
        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
        KeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), 65536, 256);
        SecretKey tmp = factory.generateSecret(spec);
        SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");

        // encrypt
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secret);
        AlgorithmParameters params = cipher.getParameters();
        byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
        byte[] ciphertext = cipher.doFinal(cipherText.getBytes("UTF-8"));
        System.out.println("password : "+password);
        System.out.println("salt : "+salt);
        System.out.println("cipherText : "+cipherText);
        System.out.println("iv : "+new BASE64Encoder().encode(iv));
        System.out.println("ciphertext : "+new BASE64Encoder().encode(ciphertext));
        // decrypt
        Cipher cipherDecrypt = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipherDecrypt.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv));
        String plaintext = new String(cipherDecrypt.doFinal(ciphertext), "UTF-8");
        System.out.println("decrypted text : "+plaintext);

    public static void main(String[] args) throws Exception {
        TestingAES testingAES = new TestingAES();

And this is what is written on my netbeans console,

Oh and if you ever found this kind of error

Caused by: Illegal key size or default parameters

it means that you need to install Java Cryptography Extension (JCE). You will find it here,

Have fun :-D