AES加密心路历程
AES加密
加密算法 | AES |
---|---|
加密模式 | CBC |
填充 | pkcs5padding |
数据块 | 128位 |
密码 | 当前用户的AppKey取前32位 |
偏移量 | 当前用户的AppKey取前16位 |
输出 | base64 |
字符集 | utf8 |
jdk1.6加密过程的梳理
首先看一下实现
public static String encrypt(String text,String key,String iv) throws Exception {
String encodedText = "";
try {
// 密钥
byte[] keyBytes = key.getBytes("utf-8");
// 偏移向量
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("utf-8"));
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
// AES加密/CBC模式/PKCS5Padding填充方式(默认)
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// 初始化
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivParameterSpec);
byte[] encData = cipher.doFinal(text.getBytes("utf-8"));
// base64
encodedText = new BASE64Encoder().encode(encData);
System.out.println(encodedText);
} catch (Exception e) {
e.printStackTrace();
}
return encodedText;
}
下面谈一下心路历程
毫无头绪:一开始第三方让我们按照他们给的要求加密,具体内容如上表格,还给了一个网址,
一个在线加密工具,没有实现,崩溃啊,也没有个工具类提供一下,然后多方沟通给了一个工具类,但是没法用,加密依然失败;
逐步摸索:我们的几经实验依然不行,实在没办法就联系了其他友商,看看哪家和他们对接上了,果然有人对接上了,取经,给了我们一个说明文档
1、
D:\Program Files (x86)\Java\jdk1.8.0_112\jre\lib\security 中的 java.security
添加:
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
2、
D:\Program Files (x86)\Java\jdk1.8.0_112\jre\lib\security 文件中 添加两个jar
local_policy.jar和US_export_policy.jar
3、
D:\Program Files (x86)\Java\jdk1.8.0_112\jre\lib\ext 中添加
bcprov-jdk15to18-1.70.jar 包
这是原文,对此我们做了一些调整:
第一:java.security修改了jdk和jre两部分;
第二:添加的两个jar包,我本地有,所以没动(问题就出现在这);
第三:添加的bcprov-jdk15to18-1.70.jar改成bcprov-jdk15to16-1.69.jar,因为我本地是jdk1.6的
再次测试,依然失败,头疼啊!!!
看见曙光:报错内容一开始没当一回事,这也是我的失误,后面我在百度上一顿搜,还真有这样的,看他们怎么实现的,也走不少弯路,加密key长度一直报异常,最后看到一个关键词 jce,
Illegal key size at javax.crypto.Cipher.a(DashoA13*..)
然后有一个博客拯救了我,java jce加密算法密钥长度限制解决方案,关于key长度的限制,这次是真正的看见了曙光,立即下载,下载地址,一波测试,搞定了!
Tips:这期间跟提供方要了一份加密的密文和原文,方便我比对。