package com.moral.util; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import lombok.extern.slf4j.Slf4j; import org.apache.commons.net.util.Base64; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * @ClassName AESUtil * @Description AES工具类 * @Author 陈凯裕 * @Date 2021/3/9 14:25 * @Version TODO **/ @Slf4j @Component public class AESUtils { //密钥 public static String key ; //字符集 private static String charset = "utf-8"; // 偏移量 private static int offset = 16; //AES种类 private static String transformation = "AES/CBC/PKCS5Padding"; private static String algorithm = "AES"; @Value("${AES.KEY}") public void setKey(String key) { AESUtils.key = key; } //加密 public static String encrypt(String content) { return encrypt(content, key); } //解密 public static String decrypt(String content) { return decrypt(content, key); } //加密 public static String encrypt(String content, String key) { try { SecretKeySpec skey = new SecretKeySpec(key.getBytes(), algorithm); IvParameterSpec iv = new IvParameterSpec(key.getBytes(), 0, offset); Cipher cipher = Cipher.getInstance(transformation); byte[] byteContent = content.getBytes(charset); cipher.init(Cipher.ENCRYPT_MODE, skey, iv);// 初始化 byte[] result = cipher.doFinal(byteContent); return new Base64().encodeToString(result); // 加密 } catch (Exception e) { log.error("Encryption failed!"); e.printStackTrace(); } return null; } //解密 public static String decrypt(String content, String key) { try { SecretKeySpec skey = new SecretKeySpec(key.getBytes("utf-8"), algorithm); IvParameterSpec iv = new IvParameterSpec(key.getBytes("utf-8"), 0, offset); Cipher cipher = Cipher.getInstance(transformation); cipher.init(Cipher.DECRYPT_MODE, skey, iv);// 初始化 byte[] result = cipher.doFinal(new Base64().decode(content)); return new String(result); // 解密 } catch (Exception e) { log.error("Decryption failed!"); e.printStackTrace(); } return null; } public static void main(String[] args) { // System.out.println(encrypt("123456","AD42F7787B035B7580000EF93BE20BAD")); //123456 KoWjfDMZQhJMLlG1crBPqQ== // 部分提交 String str = decrypt("KoWjfDMZQhJMLlG1crBPqQ==", "AD42F7787B035B7580000EF93BE20BAD"); System.out.println(str); } }