/**
* @ClassName AES256
* @Desc Aes工具类
* 加密方式AESCBC
* 填充pkcs5padding
* 密钥长度256位
* 输出BASE64
* @Author chengxiaolong
* @Date 2022-05-10
* 需要替换****\Java\jre1.8.0_66\lib\security\下的local_policy.jar,US_export_policy.jar
* 两个jar包,不然会有解密长度限制
**/
@Slf4j
public class AES256 {
private static final String ALGORITHM = "AES";
private static final String AES_CBC_PADDING = "AES/CBC/PKCS5Padding";
public static String encode(String key, String content, byte[] vi) {
try {
javax.crypto.SecretKey secretKey = new javax.crypto.spec.SecretKeySpec(key.getBytes(), "AES");
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(AES_CBC_PADDING);
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, secretKey, new javax.crypto.spec.IvParameterSpec(vi));
// 获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
byte[] byteEncode = content.getBytes(java.nio.charset.StandardCharsets.UTF_8);
// 根据密码器的初始化方式加密
byte[] byteAES = cipher.doFinal(byteEncode);
// 将加密后的数据转换为字符串
return Base64.getEncoder().encodeToString(byteAES);
} catch (Exception e) {
log.error("AES256/CBC/PKCS5Padding 加密异常 {}",e.getMessage());
e.printStackTrace();
}
return null;
}
public static String decode(String key, String content, byte[] vi) {
try {
javax.crypto.SecretKey secretKey = new javax.crypto.spec.SecretKeySpec(key.getBytes(), "AES");
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(AES_CBC_PADDING);
cipher.init(javax.crypto.Cipher.DECRYPT_MODE, secretKey, new javax.crypto.spec.IvParameterSpec(vi));
// 将加密并编码后的内容解码成字节数组
byte[] byteContent = Base64.getDecoder().decode(content);
// 解密
byte[] byteDecode = cipher.doFinal(byteContent);
return new String(byteDecode, java.nio.charset.StandardCharsets.UTF_8);
} catch (Exception e) {
log.error("AES256/CBC/PKCS5Padding 解密异常 {}",e.getMessage());
}
return null;
}
public static void main(String[] args) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String id_card_no = "1271131201920003";
String mobile = "6282365055683";
String client_key = "cKpol89zzE"; //自定义key
//需加密的明文
String unencrypted_string = "indosakuscore127113120192000362823650556832022-05-09T11:35:26";
String encryption_key = GetMd5.strToMD5(client_key).toLowerCase();
//MD5加密前16位
String iv = GetMd5.strToMD5(client_key).toLowerCase().substring(0, 16);
byte[] IV = iv.getBytes(StandardCharsets.UTF_8);
String encode1 = encode(encryption_key, unencrypted_string, IV);
System.out.println(encode1);
}
AES256-CBC加解密
最新推荐文章于 2025-04-09 13:55:24 发布