(1)对加密串A做base64解码,得到加密串B
(2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>密钥设置 )
(3)用key*对加密串B做AES-256-ECB解密(PKCS7Padding)
因为解密为PKCS7Padding
所以需要先下载jar包,根据版本下载
JDK8 jar包下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
JDK7 jar包下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK6 jar包下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
下载后把那两个jar文件放到jdk安装路径
\jre\lib\security\下
local_policy.jar
US_export_policy.jar
直接上代码!!!全网最简单
private static final String ALGORITHM_MODE_PADDING = "AES/ECB/PKCS7Padding";
public static String decryptData(String reqInfo) throws Exception {
Security.addProvider(new BouncyCastleProvider());
byte[] decodeData = decodeData(reqInfo);
SecretKeySpec key = new SecretKeySpec(MD5Util.md5Hex(WXMpConstant.DISCOUNT_CONSUMER_APP_KEY,"utf-8").toLowerCase().getBytes(), "AES");
Cipher cipher = null;
cipher = Cipher.getInstance(ALGORITHM_MODE_PADDING,"BC");
cipher.init(Cipher.DECRYPT_MODE,key);
return new String(cipher.doFinal(decodeData),"utf-8");
}
/**
* 解码数据
*
* @param encodeData 编码数据
* @return 数据
*/
private static byte[] decodeData(String encodeData) {
return Base64.getDecoder().decode(encodeData);
}
后面就是把解密的微信xml数据转为map,然后取值就ok了