package gj.secure; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.util.Base64; /** * @author areful */ public class AESUtil { public static final String KEY_ALGORITHM = "AES"; public static final String CIPHER_ALGORITHM_CBC = "AES/CBC/PKCS5Padding"; public static final String CIPHER_ALGORITHM_ECB = "AES/ECB/PKCS5Padding"; public static byte[] initKey() throws Exception { KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM); kg.init(128); return kg.generateKey().getEncoded(); } public static byte[] encrypt(byte[] data, byte[] key) throws Exception { Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM_ECB); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, KEY_ALGORITHM)); return cipher.doFinal(data); } public static byte[] decrypt(byte[] data, byte[] key) throws Exception { Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM_ECB); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, KEY_ALGORITHM)); return cipher.doFinal(data); } public static byte[] encrypt(byte[] data, byte[] key, byte[] iv) throws Exception { Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, KEY_ALGORITHM), new IvParameterSpec(iv)); return cipher.doFinal(data); } public static byte[] decrypt(byte[] data, byte[] key, byte[] iv) throws Exception { Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, KEY_ALGORITHM), new IvParameterSpec(iv)); return cipher.doFinal(data); } public static void main(String[] args) throws Exception { byte[] text = "Hello, AES cipher!".getBytes(StandardCharsets.UTF_8); byte[] key = "0123456789abcdef".getBytes(); byte[] iv = "abcdefghijklmnop".getBytes(); byte[] cipherText = encrypt(text, key, iv); String base64String = Base64.getEncoder().encodeToString(cipherText); System.out.println(base64String); byte[] plainText = decrypt(Base64.getDecoder().decode(base64String), key, iv); System.out.println(new String(plainText, StandardCharsets.UTF_8)); } }