javax.crypto.BadPaddingException: Given final block not properly padded
后台解密 偶尔解密失败 重新调用都是成功的
byte[] encData = Base64.decodeBase64(encryptedData);
byte[] ivStr = Base64.decodeBase64(iv);
byte[] key = Base64.decodeBase64(sessionKey);
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivStr);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
String dataResult = new String(cipher.doFinal(encData),"UTF-8");
https://blog.csdn.net/SangHongxv/article/details/88602978
刚刚解决了,一直是思路错了,一直在找各种不同的代码去解密,结果都是一样会有时解密失败。
最后看了上述文章,才明白,是接入顺序错误了
错误都逻辑:
用户授权(bindgetuserinfo)--》wx.login()[获取sessionKey]--》授权手机号码(bindgetphonenumber)
正确都逻辑:
wx.login()[获取sessionKey]--》用户授权(bindgetuserinfo)--》授权手机号码(bindgetphonenumber)
https://blog.csdn.net/wh7pwb98/article/details/131115516
这个问题我这边也遇到了,,很奇怪,在同事电脑上项目中都可以获取到数据,,我电脑项目中就无法获取到,就直接报错了,同样的代码,导包也是一样的,不清楚是啥问题了,很奇怪
javax.crypto.BadPaddingException: Given final block not properly padde\d. Such issues can arise if a bad key is used during decryption.
javax.crypto.BadPaddingException: Given final block not properly padded
我的解决方式是:先login获取code,然后再让用户点击按钮获取手机号,这样没出来问题了。原先的我的步骤是:1、先获取加密的手机号,2、再获取code,这样就会报错了。用户信息调用的是getUserProfile这个接口,按照业务流程放哪里都可以。
我来告诉大家这个问题的根本原因是什么,前端传给你的参数有三个一个code 一个iv 一个加密的字符串,用code换取sessionkey再解密加密数据,解密失败的时候,你不妨拿你上一次的sessionkey来解密试试 你会发现 竟然解密成功。其实就是前端在上一个code还没过期的情况下获取的手机号加密数据,然后发给你的时候又重新获取了一个code跟加密数据一起传给你。
解决了没有啊 我也遇到了QAQ
麻烦问一下,解决没有呢? 我这边也是偶然发生!
你好 我也遇到了这个问题 我用的 python3 官方sdk, 但是偶尔会出现这种情况
失败提示
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#%E5%8A%A0%E5%AF%86%E6%95%B0%E6%8D%AE%E8%A7%A3%E5%AF%86%E7%AE%97%E6%B3%95
微信官方提供了多种编程语言的示例代码((点击下载)。每种语言类型的接口名字均一致。调用方式可以参照示例。