网上的大部分代码都很坑啊!
真不知道他们怎么解密出来的。
不是BadPading ....Exception就是解密出来的数据是空的或者是一大串看不懂的玩意儿。
推荐一个代码,亲测可用,没亲测天打雷劈。
感谢!原文链接:https://yangguangftlp.iteye.com/blog/2339087
代码我也不知道啥意思,白问我。
运行截图为证!:("-----------"后面的是数据,这玩意是我输出的)
贴代码喽:
/**
* 解密方法
*
* @param encryptedDatas 要解密的字符串
* @param sessionKey 解密密钥
* @param iv 对称解密算法初始向量 iv
* @return 解密后的json
*/
public JSONObject decrypt(String encryptedDatas, String sessionKey, String iv) {
byte[] encryptedData = Base64.decode(encryptedDatas);
byte[] keyBytes = Base64.decode(sessionKey);
byte[] ivs = Base64.decode(iv);
SecretKeySpec key;
Cipher cipher;
String originalString;
key = new SecretKeySpec(keyBytes, "AES");
try {
// 初始化cipher,原来这里都写得PKCS7Padding,啧啧啧反正用不了
cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivs));
byte[] original = cipher.doFinal(encryptedData);
int pad = (int) original[original.length - 1];
if (pad < 1 || pad > 32) {
pad = 0;
}
byte[] reslutByte = Arrays.copyOfRange(original, 0, original.length - pad);
originalString = new String(reslutByte, "UTF-8");
JSONObject jsonObject = JSONObject.fromObject(originalString);
return jsonObject;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
好多人贴代码不贴impot的,那我知道你用的哪个类?:
import net.sf.json.JSONObject;
import org.bouncycastle.util.encoders.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Arrays;
还有maven依赖,不用maven的自己去下jar包:
<!--微信解密工具包 -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.57</version>
</dependency>
<!--json工具包-->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>