package com.ruoyi.jianguan.elutong.core;
|
|
import org.slf4j.LoggerFactory;
|
|
import javax.crypto.Cipher;
|
import javax.crypto.spec.SecretKeySpec;
|
|
public class AESTools {
|
|
private static final String KEY_ALGORITHM = "AES";
|
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";// 默认的加密算法
|
|
/**
|
* AES 加密操作
|
*
|
* @param content 待加密内容
|
* @param password 加密密码
|
* @return 返回Base64转码后的加密数据
|
*/
|
public static String encrypt(String content, String password) {
|
try {
|
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);// 创建密码器
|
byte[] byteContent = content.getBytes("utf-8");
|
cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(password));// 初始化为加密模式的密码器
|
byte[] result = cipher.doFinal(byteContent);// 加密
|
return Base64Tools.encodeToString(result);// 通过Base64转码返回
|
} catch (Exception ex) {
|
LoggerFactory.getLogger(AESTools.class).error("", ex);
|
throw new RuntimeException("AES加密失败:" + content);
|
}
|
}
|
|
/**
|
* AES 解密操作
|
*
|
* @param content
|
* @param password
|
* @return
|
*/
|
public static String decrypt(String content, String password) {
|
try {
|
// 实例化
|
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
|
// 使用密钥初始化,设置为解密模式
|
cipher.init(Cipher.DECRYPT_MODE, getSecretKey(password));
|
// 执行操作
|
byte[] result = cipher.doFinal(Base64Tools.decodeFromString(content));
|
return new String(result, "utf-8");
|
} catch (Exception ex) {
|
LoggerFactory.getLogger(AESTools.class).error("", ex);
|
throw new RuntimeException("AES解密失败:" + content);
|
}
|
}
|
|
/**
|
* 生成加密秘钥
|
*
|
* @return
|
*/
|
private static SecretKeySpec getSecretKey(final String password) {
|
try {
|
return new SecretKeySpec(password.getBytes("UTF-8"), KEY_ALGORITHM);// 转换为AES专用密钥
|
} catch (Exception ex) {
|
LoggerFactory.getLogger(AESTools.class).error("", ex);
|
throw new RuntimeException("生成加密秘钥");
|
}
|
}
|
|
}
|