按照文档解密
解密步骤如下:
(1)对加密串A做base64解码,得到加密串B
(2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 )
(3)用key*对加密串B做AES-256-ECB解密(PKCS7Padding)
解密过程报pad block corrupted异常
这里我用的密钥是APIv3的密钥(不确定是不是用错了),后来在文档https://pay.weixin.qq.com/docs/merchant/development/interface-rules/introduction.html发现写着:使用JSON作为数据交互的格式,不再使用XML
是不是我使用错密钥了 这里的退款密钥要用哪个密钥?
你这个是V2。。。
public static void main(String[] args) throws Exception { System.out.println(descrypt(req_info,key)); } static String descrypt(String reqInfo,String key) { byte[] reqInfoB = Base64.decodeBase64(reqInfo); String key_ = DigestUtils.md5Hex(key).toLowerCase(); if (Security.getProvider("BC") == null){ Security.addProvider(new BouncyCastleProvider()); } Cipher cipher; try { cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC"); }catch (Exception e){ e.printStackTrace(); throw new RuntimeException("秘密获取失败"); } SecretKeySpec secretKeySpec = new SecretKeySpec(key_.getBytes(), "AES"); try { cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); }catch (InvalidKeyException ie){ ie.printStackTrace(); throw new RuntimeException("秘密初始化失败"); } try { return new String(cipher.doFinal(reqInfoB)); }catch (Exception ie){ ie.printStackTrace(); throw new RuntimeException("秘密初始化失败"); } }