小程序
小游戏
企业微信
微信支付
扫描小程序码分享
退款成功后退款通知回调req_info字段是加密的 现在通过文档进行base64解码 MD5加密之后进行 key*对加密串B做AES-256-ECB解密(PKCS7Padding)这一步的时候一直报 javax.crypto.BadPaddingException: pad block corrupted 这个错 百度了一堆方法尝试玩还是报这个错 有没有大佬有解决方案的 demo也只有PHP的 也是无语了
6 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
微信支付太烂。提供个好用的SDK,会死吗?
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
微信的文档就是恶心,就舍不得在上面写个代码DEMO,让我们开发一个一个来踩坑,踩了坑他们也不填平。希望腾讯多出BUG。
https://blog.csdn.net/qq_44776721/article/details/113701498
java demo 亲测可用
请问大佬,可以贴出一个完整的demo吗?
解密成功,搞了一上午,不得不说微信开发文档真烂 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";
您好,请参考:
初始化:
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");
ivStr 可以告知一下这个字段是什么意思吗
给的方法也尝试过了 还是不行啊 还是报: pad block corrupted 这个错 出了这个偏移量的数据是百度搜到的以外 其他的都是一样的 能给个回复么
您好,上面的仅供参考,这个需要开发者自己开发进行解决。
终于解决了 你给的demo有问题啊 key = new SecretKeySpec(keyBytes, KEY_ALGORITHM); 这里面你传的KEY_ALGORITHM 下面的初始化 cipher = Cipher.getInstance(algorithmStr, "BC"); 也要传入KEY_ALGORITHM 这个值 而不是你发的这两个。。。。
您好,我发的仅供参考,哈哈
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
微信支付太烂。提供个好用的SDK,会死吗?
微信的文档就是恶心,就舍不得在上面写个代码DEMO,让我们开发一个一个来踩坑,踩了坑他们也不填平。希望腾讯多出BUG。
https://blog.csdn.net/qq_44776721/article/details/113701498
java demo 亲测可用
请问大佬,可以贴出一个完整的demo吗?
解密成功,搞了一上午,不得不说微信开发文档真烂 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";
您好,请参考:
初始化:
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");
ivStr 可以告知一下这个字段是什么意思吗
给的方法也尝试过了 还是不行啊 还是报: pad block corrupted 这个错 出了这个偏移量的数据是百度搜到的以外 其他的都是一样的 能给个回复么
您好,上面的仅供参考,这个需要开发者自己开发进行解决。
终于解决了 你给的demo有问题啊 key = new SecretKeySpec(keyBytes, KEY_ALGORITHM); 这里面你传的KEY_ALGORITHM 下面的初始化 cipher = Cipher.getInstance(algorithmStr, "BC"); 也要传入KEY_ALGORITHM 这个值 而不是你发的这两个。。。。
您好,我发的仅供参考,哈哈