@Slf4j
public class AesTool {
private static final Logger logger = LoggerFactory.getLogger(AesTool.class); //log日志
private static final String ALGORITHM = "AES/ECB/PKCS5Padding"; //"算法/模式/补码方式"
/*****************************************************
* AES加密
* @param content 加密内容
* @param key 加密密码,由字母或数字组成
此方法使用AES-128-ECB加密模式,key需要为16位
加密解密key必须相同,如:abcd1234abcd1234
* @return 加密密文
****************************************************/
public static String enCode(String content, String key) throws Exception {
byte[] raw = key.getBytes(); //获得密码的字节数组
SecretKeySpec skey = new SecretKeySpec(raw, "AES"); //根据密码生成AES密钥
Cipher cipher = Cipher.getInstance(ALGORITHM); //根据指定算法ALGORITHM自成密码器
cipher.init(Cipher.ENCRYPT_MODE, skey); //初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥
byte[] byteContent = content.getBytes("utf-8"); //获取加密内容的字节数组(设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
byte[] encodeContent = cipher.doFinal(byteContent); //密码器加密数据
return Base64.encodeBase64String(encodeContent); //将加密后的数据转换为字符串返回
}
/*****************************************************
* AES解密
* @param content 加密密文
* @param key 加密密码,由字母或数字组成
此方法使用AES-128-ECB加密模式,key需要为16位
加密解密key必须相同
* @return 解密明文
****************************************************/
public static String deCode(String content, String key) throws Exception {
byte[] raw = key.getBytes(); //获得密码的字节数组
SecretKeySpec skey = new SecretKeySpec(raw, "AES"); //根据密码生成AES密钥
Cipher cipher = Cipher.getInstance(ALGORITHM); //根据指定算法ALGORITHM自成密码器
cipher.init(Cipher.DECRYPT_MODE, skey); //初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥
byte[] encodeContent = Base64.decodeBase64(content.getBytes(StandardCharsets.UTF_8)); //把密文字符串转回密文字节数组
byte[] byteContent = cipher.doFinal(encodeContent); //密码器解密数据
return new String(byteContent, "utf-8"); //将解密后的数据转换为字符串返回
}
/**
* 自定义内容加盐
*
* @param salt
* @return
*/
public static String customSaltContent(String salt) {
return DigestUtils.md5Hex(salt).substring(8, 24);
}
/* *//*****************************************************
* AES加密解密测试
* @param args
* @return
****************************************************//*
public static void main(String[] args) throws Exception {
String content = "加密解密测试";
logger.info("加密content:" + content);
String key = "abcd1234abcd1234";
logger.info("加密key:" + key);
String enResult = enCode(content, key);
logger.info("加密result:" + enResult);
String deResult = deCode(enResult, key);
logger.info("解密result:" + deResult);
}*/
}
JAVA AES 加解密工具类
最新推荐文章于 2024-08-02 07:30:00 发布