首先介绍一下Hutool,借用其官网的一段话:
引用自Hutool官网
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
使用Hutool的jar包可比较方便的进行AES加密,但是目前Hutool的各版本最低支持jdk1.7,对于jdk1.6环境的程序就比较尴尬了,下面介绍一个替代方案。
使用Hutool的jar进行aes加密的代码为:
public static String encByAES(String data) {
String key = "XXXXXXXXXXX";
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes());
byte[] strByte = aes.encrypt(data);
return Base64.encode(strByte);
}
这个方式在jdk1.8环境下没有问题,由于Hutool不支持jdk1.6,jdk1.6环境下程序想用aes加密采用如下方式:
public static String Encrypt(String sSrc) throws Exception {
String sKey = "XXXXXXXX";
byte[] raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
}
第一次执行以上代码大概率会报如下错误:
这里是引用
Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
报错原因为:美国限制 aes 256位 以上加密出口,于是Sun通过权限文件(local_policy.jar, US_export_policy.jar)做了相应限制。
Oracle在其官方网站上提供了无政策限制权限文件(Unlimited Strength Jurisdiction Policy Files),只需要将其部署在JRE环境中,就可以解决限制问题。
jar包下载连接:
oracle官网版:
jce_policy-6.zip
csdn版:
https://download.youkuaiyun.com/download/u011497507/87270593
下载对应版本的jce包,解压并放到 jdk 文件夹下的 /jre6/lib/security 文件夹中即可,我的路径为: