package scotty.crypto; import java.security.MessageDigest; import java.util.Arrays; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; /** * Encrypt and decrypt with AES. * * @author Tobias Zeising tobias.zeising@aditu.de http://www.aditu.de */ public class AESEncryption { /** * Encrypt given content with AES. * * @param content * @param password * @return encrypted content * @throws CryptoException */ public static byte[] encrypt(byte[] content, String password) throws CryptoException { return deAndEncrypt(content, password, false); } /** * Decrypt given content with AES. * * @param content * @param password * @return plain text * @throws CryptoException */ public static byte[] decrypt(byte[] content, String password) throws CryptoException { return deAndEncrypt(content, password, true); } /** * Encrypt or decrypt content with password. * * @param content * @param password * @param decrypt * @return decrypted or encrypted content * @throws CryptoException */ private static byte[] deAndEncrypt(byte[] content, String password, boolean decrypt) throws CryptoException { try { // hash password for correct password length of 128 bit MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(password.getBytes()); byte[] hashedPassword = md.digest(); byte[] shortenHashedPassword = Arrays.copyOf(hashedPassword, 16); // encrypt/decrypt SecretKeySpec key = new SecretKeySpec(shortenHashedPassword, "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(decrypt ? Cipher.DECRYPT_MODE : Cipher.ENCRYPT_MODE, key); return cipher.doFinal(content); } catch (Exception e) { throw new CryptoException("Error AES encrypt: " + e.getMessage()); } } }