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:这期间跟提供方要了一份加密的密文和原文,方便我比对。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构