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了

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