2/19/2013

JAVA AES encryption and decryption

AES encryption support multiple key length, 128, 192, 256.

What needs  to be noticed is that, default java library support maximum 128 length key. If you want to use key length larger than 128, you need to upgrade the JCE to "Unlimited Strength Jurisdiction Policy". The library can be downloaded from:
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

Or, the encryption or decryption will not work.

Example for 256 AES encryption and decryption:

Encryption:

public byte[] encrypt(String content, String password{
       try {
           KeyGenerator kgen = KeyGenerator.getInstance("AES");
           kgen.init(256, new SecureRandom(password.getBytes()));
           SecretKey secretKey = kgen.generateKey();
           byte[] enCodeFormat = secretKey.getEncoded();
           SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
           Cipher cipher = Cipher.getInstance("AES");
           byte[] byteContent = content.getBytes("utf-8");
           cipher.init(Cipher.ENCRYPT_MODE, key);
           byte[] result = cipher.doFinal(byteContent);
           return result;
       } catch (Exception e{
           LOGGER.error("Cannot encrypt payload!",e);
       }
       return null;
   }



Decryption:

public byte[] decryptMoxyMessageWithAES(byte[] payload, byte[] password, String algorithm{
       
       byte[] result = null;
       
       try {
           KeyGenerator kgen = KeyGenerator.getInstance("AES");
           kgen.init(256, new SecureRandom(password));
           SecretKey secretKey = kgen.generateKey();
           byte[] enCodeFormat = secretKey.getEncoded();
           SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
           Cipher cipher = Cipher.getInstance("AES");
           cipher.init(Cipher.DECRYPT_MODE, key);
           result = cipher.doFinal(payload);
           
       } catch (NoSuchAlgorithmException e1{
           LOGGER.error("The message cannot be decrypted.", e1);
           return null;
       } catch (NoSuchPaddingException e2{
           LOGGER.error("The message cannot be decrypted.", e2);
           return null;
       }catch (InvalidKeyException e3{
           LOGGER.error("The message cannot be decrypted.", e3);
           return null;
       }catch (IllegalBlockSizeException e4{
           LOGGER.error("The message cannot be decrypted.", e4);
           return null;
       } catch (BadPaddingException e5{
           LOGGER.error("The message cannot be decrypted.", e5);
           return null;
       }catch (Exception e{
           LOGGER.error("The message cannot be decrypted.", e);
           return null;
       }
       return result;
   }


No comments:

Post a Comment