收藏
回答

关于微信支付退款req_info字段解密问题

退款成功后退款通知回调req_info字段是加密的  现在通过文档进行base64解码     MD5加密之后进行 key*对加密串B做AES-256-ECB解密(PKCS7Padding)这一步的时候一直报 javax.crypto.BadPaddingException: pad block corrupted 这个错   百度了一堆方法尝试玩还是报这个错   有没有大佬有解决方案的  demo也只有PHP的  也是无语了

回答关注问题邀请回答
收藏

6 个回答

  • hellojd
    hellojd
    2019-11-29

    微信支付太烂。提供个好用的SDK,会死吗?

    2019-11-29
    有用 4
    回复 1
    • Actuator
      Actuator
      2020-05-22
      人家是爹,你爱用不用,之前觉得阿里些的东西跟国外的比感觉太烂,现在拿腾讯的和阿里的比感觉腾讯的太烂,真是没有对比就没有伤害,。
      2020-05-22
      回复
  • 西瓜叔叔
    西瓜叔叔
    2020-04-14

    微信的文档就是恶心,就舍不得在上面写个代码DEMO,让我们开发一个一个来踩坑,踩了坑他们也不填平。希望腾讯多出BUG。

    2020-04-14
    有用 1
    回复
  • 石磊
    石磊
    2021-02-05

    https://blog.csdn.net/qq_44776721/article/details/113701498

    java demo 亲测可用

    2021-02-05
    有用
    回复
  • bibolibo
    bibolibo
    2021-02-04

    请问大佬,可以贴出一个完整的demo吗?


    2021-02-04
    有用
    回复
  • 我是良民
    我是良民
    2019-12-27
    解密成功,搞了一上午,不得不说微信开发文档真烂
    
    SecretKeySpec key = newSecretKeySpec((MD5.encodeString(appKey, WXPayConstants.UTF8)toLowerCase().getBytes()), ALGORITHM);
    SecurityaddProvider(newBouncyCastleProvider());
    Cipher cipher = CiphergetInstance(ALGORITHM_MODE_PADDING, "BC";
    cipher.init(Cipher.DECRYPT_MODE, key);
    Base64.Decoder decoder = Base64getDecoder();
    byte[] decryptContent = cipher.doFinal(reqInfo);
    
    returnnewString(decryptContent, "utf-8";
    
    2019-12-27
    有用
    回复 2
  • 微信支付技术助手7
    微信支付技术助手7
    2019-03-19

    您好,请参考:

    初始化:


     Security.addProvider(new BouncyCastleProvider());

     key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);

    // 初始化cipher

     cipher = Cipher.getInstance(algorithmStr, "BC");


    加密:


     cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(ivStr.getBytes("UTF-8")));

     byte[] enbytes = cipher.doFinal(contentStr.getBytes("UTF-8"));

     return new BASE64Encoder().encode(enbytes)


    解密:


     byte[] contentBye = new BASE64Decoder().decodeBuffer(base64Str)

     cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivStr.getBytes("UTF-8")));

     byte[] dedata = cipher.doFinal(contentBye);

     return new String(dedata, "UTF-8");


    2019-03-19
    有用
    回复 11
    • ZXK^O^😄
      ZXK^O^😄
      2019-03-19

      ivStr 可以告知一下这个字段是什么意思吗

      2019-03-19
      回复
    • ZXK^O^😄
      ZXK^O^😄
      2019-03-19回复ZXK^O^😄

      给的方法也尝试过了  还是不行啊  还是报: pad block corrupted 这个错    出了这个偏移量的数据是百度搜到的以外 其他的都是一样的   能给个回复么

      2019-03-19
      回复
    • 微信支付技术助手7
      微信支付技术助手7
      2019-03-19回复ZXK^O^😄

      您好,上面的仅供参考,这个需要开发者自己开发进行解决。

      2019-03-19
      回复
    • ZXK^O^😄
      ZXK^O^😄
      2019-03-19回复微信支付技术助手7

      终于解决了  你给的demo有问题啊  key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);   这里面你传的KEY_ALGORITHM   下面的初始化 cipher = Cipher.getInstance(algorithmStr, "BC"); 也要传入KEY_ALGORITHM   这个值  而不是你发的这两个。。。。

      2019-03-19
      1
      回复
    • 微信支付技术助手7
      微信支付技术助手7
      2019-03-19回复ZXK^O^😄

      您好,我发的仅供参考,哈哈

      2019-03-19
      回复
    查看更多(6)
登录 后发表内容