| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package com.malk.lianan;
- import cn.hutool.core.codec.Base64;
- import cn.hutool.crypto.Mode;
- import cn.hutool.crypto.Padding;
- import cn.hutool.crypto.symmetric.AES;
- import java.nio.charset.StandardCharsets;
- import java.util.Arrays;
- public class AesUtil {
- /**
- * AES CBC 加密
- * @param content 明文内容
- * @param key 密钥(需要16/24/32字节)
- * @return Base64编码的密文
- */
- public static String encrypt(String content, String key) {
- // 1. 创建AES对象,指定CBC模式,PKCS5Padding填充
- AES aes = new AES(Mode.CBC, Padding.PKCS5Padding,
- key.getBytes(StandardCharsets.UTF_8));
- // 2. 设置IV(这里使用密钥的前16字节,但实际应该用随机IV)
- // 注意:实际项目中IV应该是随机的,每次加密都不同
- byte[] ivBytes = key.getBytes(StandardCharsets.UTF_8);
- if (ivBytes.length > 16) {
- ivBytes = Arrays.copyOf(ivBytes, 16);
- } else if (ivBytes.length < 16) {
- // 填充到16字节
- ivBytes = Arrays.copyOf(ivBytes, 16);
- Arrays.fill(ivBytes, ivBytes.length, 16, (byte)0);
- }
- aes.setIv(ivBytes);
- // 3. 加密并返回Base64
- byte[] encrypted = aes.encrypt(content, StandardCharsets.UTF_8);
- return Base64.encode(encrypted);
- }
- /**
- * 解密
- */
- public static String decrypt(String base64Content, String key) {
- AES aes = new AES(Mode.CBC, Padding.PKCS5Padding,
- key.getBytes(StandardCharsets.UTF_8));
- byte[] ivBytes = key.getBytes(StandardCharsets.UTF_8);
- if (ivBytes.length > 16) {
- ivBytes = Arrays.copyOf(ivBytes, 16);
- } else if (ivBytes.length < 16) {
- ivBytes = Arrays.copyOf(ivBytes, 16);
- Arrays.fill(ivBytes, ivBytes.length, 16, (byte)0);
- }
- aes.setIv(ivBytes);
- byte[] decoded = Base64.decode(base64Content);
- return aes.decryptStr(decoded, StandardCharsets.UTF_8);
- }
- }
|