java,微信退款結果通知解密

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章