import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
public class AES256Util {
private static final String KEY = "C1F2F1C7A247C5F29665EEE70AAD2A1D";
private static final String ALGORITHM = "AES";
private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";
private static final String CHARSET = "UTF-8";
private final SecretKeySpec secretKey;
private final IvParameterSpec iv;
private static final byte[] ivBytes = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
public AES256Util(String key) {
try {
byte[] keyBytes = key.getBytes(CHARSET);
// byte[] ivBytes = initVector.getBytes(CHARSET);
// Ensure key is 32 bytes for AES-256
if (keyBytes.length != 32) {
throw new IllegalArgumentException("Key must be 32 bytes for AES-256");
}
// Ensure IV is 16 bytes
if (ivBytes.length != 16) {
throw new IllegalArgumentException("IV must be 16 bytes");
}
this.secretKey = new SecretKeySpec(keyBytes, ALGORITHM);
this.iv = new IvParameterSpec(ivBytes);
} catch (Exception e) {
throw new RuntimeException("Failed to initialize AES256Util", e);
}
}
public String encrypt(String value) {
try {
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] encrypted = cipher.doFinal(value.getBytes(CHARSET));
return Base64.getEncoder().encodeToString(encrypted);
} catch (Exception ex) {
throw new RuntimeException("Encryption failed", ex);
}
}
/**
* 解密方法
* @param encrypted
* @return
*/
public String decrypt(String encrypted) {
try {
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
byte[] original = cipher.doFinal(Base64.getDecoder().decode(encrypted));
return new String(original, CHARSET);
} catch (Exception ex) {
throw new RuntimeException("Decryption failed", ex);
}
}
public static void main(String[] args) throws UnsupportedEncodingException {
AES256Util aes = new AES256Util(KEY);
String base64 = "od5MJeu3gBZ0nK7NsuDzf2N6rb4DLpOecOSRHoAcsMNGAJzAwROjSkyEItu6YOEBpboOWfcq8t1Vca/Ycvb0QK29kuEAF3MKAvFLhUoO/PK8XqNXQUx9fUeOGVhEO9dNqfvlnJMX8WLQj5zV+0e7DdqzwZLQT9KwqnIc6Y5HA7x8GHl3liiPc6keuz9OghJ1/1SpQhJ+2gEKDQmczX5G6t2aMjIffwypg1nAJFzhnoqOxYB6cvq8vUMcf7DnsZVEQsvSinzVGQKyOxBRHBwh6QAG1regtdTtg/fs6clvEAsKWjdpxwBxzrRsVUA/aRCzo5enHbihaOgazKbH8qwOp4Ifr3aCjgiyf+c6b702PL+8DOzEi/uJguCsOhzVz82dzRYYomnfq/Opz4MT/tahy+HG2CLjvkMVtKr4go9JOv4=";
String decryptedString = aes.decrypt(base64);
System.out.println("Decrypted: " + decryptedString);
}
}