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:这期间跟提供方要了一份加密的密文和原文,方便我比对。

posted @ 2022-12-12 18:12  平心先生  阅读(225)  评论(0编辑  收藏  举报