001 package com.khubla.pragmatach.framework.crypto; 002 003 import java.io.ByteArrayInputStream; 004 import java.io.ByteArrayOutputStream; 005 import java.security.MessageDigest; 006 import java.util.Arrays; 007 008 import javax.crypto.Cipher; 009 import javax.crypto.CipherInputStream; 010 import javax.crypto.spec.SecretKeySpec; 011 012 import org.apache.commons.codec.binary.Base64; 013 import org.apache.commons.io.IOUtils; 014 015 /** 016 * @author tome 017 */ 018 public class AES { 019 /** 020 * keyspec 021 */ 022 private final static String KEYSPEC = "AES/ECB/ISO10126Padding"; 023 024 /** 025 * decrypt 026 */ 027 public static String decrypt(String encryptedPayload, String key) 028 throws Exception { 029 try { 030 final SecretKeySpec secretKeySpec = new SecretKeySpec( 031 makeAESKey(key), "AES"); 032 final Cipher cipher = Cipher.getInstance(KEYSPEC); 033 cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); 034 final ByteArrayOutputStream baos = new ByteArrayOutputStream(); 035 final CipherInputStream CipherInputStream = new CipherInputStream( 036 new ByteArrayInputStream( 037 Base64.decodeBase64(encryptedPayload 038 .getBytes("UTF-8"))), cipher); 039 IOUtils.copy(CipherInputStream, baos); 040 return baos.toString("UTF-8"); 041 } catch (final Exception e) { 042 throw new Exception("Exception in decrypt", e); 043 } 044 } 045 046 /** 047 * encrypt 048 */ 049 public static String encrypt(String payload, String key) throws Exception { 050 try { 051 final SecretKeySpec secretKeySpec = new SecretKeySpec( 052 makeAESKey(key), "AES"); 053 final Cipher cipher = Cipher.getInstance(KEYSPEC); 054 cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); 055 final CipherInputStream CipherInputStream = new CipherInputStream( 056 new ByteArrayInputStream(payload.getBytes("UTF-8")), cipher); 057 final ByteArrayOutputStream baos = new ByteArrayOutputStream(); 058 IOUtils.copy(CipherInputStream, baos); 059 return Base64.encodeBase64String(baos.toByteArray()); 060 } catch (final Exception e) { 061 throw new Exception("Exception in encrypt", e); 062 } 063 } 064 065 /** 066 * make a nice AES key 067 */ 068 private static byte[] makeAESKey(String key) throws Exception { 069 try { 070 final MessageDigest sha = MessageDigest.getInstance("SHA-1"); 071 final byte[] rawkey = sha.digest(key.getBytes("UTF-8")); 072 return Arrays.copyOf(rawkey, 16); // use only first 128 bit 073 } catch (final Exception e) { 074 throw new Exception("Exception in makeAESKey", e); 075 } 076 } 077 }