import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESUtils {
private static final String AES_ALGORITHM = "AES/CBC/PKCS5Padding";
private static final int KEY_SIZE = 128;
public static String encrypt(String data, String key, String iv) throws Exception {
byte[] encrypted = encrypt(data.getBytes("UTF-8"), key.getBytes("UTF-8"), iv.getBytes("UTF-8"));
return Base64.getEncoder().encodeToString(encrypted);
}
public static String decrypt(String data, String key, String iv) throws Exception {
byte[] decrypted = decrypt(Base64.getDecoder().decode(data), key.getBytes("UTF-8"), iv.getBytes("UTF-8"));
return new String(decrypted, "UTF-8");
}
private static byte[] encrypt(byte[] data, byte[] key, byte[] iv) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
return cipher.doFinal(data);
}
private static byte[] decrypt(byte[] data, byte[] key, byte[] iv) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
return cipher.doFinal(data);
}
public static void main(String[] args) throws Exception {
String data = "Hello, AES encryption!";
String key = "1234567890123456"; // 16字节的密钥
String iv = "1234567890123456"; // 16字节的初始化向量
String encrypted = encrypt(data, key, iv);
System.out.println("Encrypted: " + encrypted);
String decrypted = decrypt(encrypted, key, iv);
System.out.println("Decrypted: " + decrypted);
}
}