package com.zhujizheng.IHome.util.aes; import lombok.extern.slf4j.Slf4j; import org.bouncycastle.jce.provider.BouncyCastleProvider; import sun.security.krb5.internal.crypto.Aes128; import java.nio.charset.StandardCharsets; import java.security.*; import java.util.Arrays; import java.util.Base64; import java.util.logging.Level; import java.util.logging.Logger; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import javax.xml.crypto.Data; @Slf4j public class AESUtil { private static final String KEY_ALGORITHM = "AES"; private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/PKCS7Padding";// 默认的加密算法 private static final String KEY = ".. .-.. --- ...- . .--. . -. --. -.-- .- -."; /** * AES 通用加密操作 * @param content * @return 加密的字符串 */ public static String commonEncrypt(String content) { return AESUtil.encrypt(KEY, content); } /** * AES 加密操作 * * @param content 待加密内容 * @return 返回Base64转码后的加密数据 */ public static String encrypt(String key, String content) { if (content == null || content.length() <= 0) { return ""; } try { Security.addProvider(new BouncyCastleProvider()); // 实例化 Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM); byte[] byteContent = content.getBytes("utf-8"); // 使用密钥初始化,设置为解密模式 final byte[] iv = new byte[16]; Arrays.fill(iv, (byte) 0x00); IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(key), ivParameterSpec); byte[] result = cipher.doFinal(byteContent);// 加密 return Base64.getEncoder().encodeToString(result);// 通过Base64转码返回 } catch (Exception ex) { Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex); } return null; } /** * AES 通用解密操作 * @param content * @return 解密的字符串 */ public static String commonDecrypt(String content) { return AESUtil.decrypt(KEY, content); } /** * AES 解密操作 * @Param key * @param content * @return 解密的字符串 */ public static String decrypt(String key, String content) { if (content == null || content.length() <= 0) { return ""; } try { Security.addProvider(new BouncyCastleProvider()); // 实例化 Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM); // 使用密钥初始化,设置为解密模式 final byte[] iv = new byte[16]; Arrays.fill(iv, (byte) 0x00); IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); cipher.init(Cipher.DECRYPT_MODE, getSecretKey(key), ivParameterSpec); byte[] base64Str = Base64.getDecoder().decode(content); // 执行操作 byte[] result = cipher.doFinal(base64Str); return new String(result, StandardCharsets.UTF_8); } catch (Exception ex) { Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex); } return null; } /** * 生成加密秘钥 * * @return * @throws NoSuchAlgorithmException */ private static SecretKeySpec getSecretKey(final String key) throws NoSuchAlgorithmException { byte[] utf8Key = key.getBytes(StandardCharsets.UTF_8); MessageDigest sha256Hash = MessageDigest.getInstance("SHA-256"); byte[] sha256Key = sha256Hash.digest(utf8Key); return new SecretKeySpec(sha256Key, KEY_ALGORITHM);// 转换为AES专用密钥 } }