package cc.mrbird.febs.pay.util;
|
|
import javax.crypto.Cipher;
|
import javax.crypto.spec.SecretKeySpec;
|
import java.security.Security;
|
import java.util.Base64;
|
|
/**
|
* AES加解密工具类
|
* @author chenyf
|
* @date 2018-12-15
|
*/
|
public class AESUtil {
|
// private static final Logger logger = LoggerFactory.getLogger(AesUtils.class);
|
public static final String ALGORITHM = "AES/ECB/PKCS5Padding";
|
public static final String UTF_8 = "UTF-8";
|
public static final String AES = "AES";
|
public static final String BC = "BC";
|
|
|
static {
|
//仅加载一次,不要多次加载,可能会导致内存溢出
|
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
|
}
|
|
/**
|
* 网联敏感字段AES加密
|
*
|
* @param str 敏感字段原文
|
* @param key AES密钥 必须是8位、16位、24位
|
* @return
|
*/
|
public static String Aes256Encode(String str, String key) {
|
// if(StringUtil.isNotBlank(str)) {
|
try {
|
Cipher cipher = Cipher.getInstance(ALGORITHM, BC);
|
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(UTF_8), AES); // 生成加密解密需要的Key
|
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
|
byte[] result = cipher.doFinal(str.getBytes(UTF_8));
|
return Base64.getEncoder().encodeToString(result);
|
} catch (Exception e) {
|
// logger.error("Aes256Encode error:", e);
|
return null;
|
}
|
|
}
|
|
/**
|
* 网联敏感字段密文解密
|
*
|
* @param base64Str 要被解密的密文.做了base64编码 base64Str
|
* @param key AES密钥 必须是8位、16位、24位
|
* @return 解密后的字符串
|
*/
|
public static String Aes256Decode(String base64Str, String key) {
|
// if (StringUtil.isNotBlank(base64Str)) {
|
String result = null;
|
try {
|
Cipher cipher = Cipher.getInstance(ALGORITHM, BC);
|
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(UTF_8), AES); // 生成加密解密需要的Key
|
cipher.init(Cipher.DECRYPT_MODE, keySpec);
|
byte[] decoded = cipher.doFinal(Base64Util.decode(base64Str));
|
result = new String(decoded, "UTF-8");
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return result;
|
}
|
|
|
}
|