AES加密(Java)

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);
}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容