(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了