收藏
回答

解密用户信息报错pad block corrupted

问题模块 框架类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 签名加密 微信iOS客户端 6.6.5 1.9.1

解密用户信息报错,如下:

前端:

          wx.login({
            success: function (loginResp) {
              if (loginResp.code) {
                //获取用户信息
                wx.getUserInfo({
                  withCredentials: true,
                  success: function (res) {
                    //封装登陆需要的参数
                    var params = {};
                    params.code = loginResp.code;
                    params.encryptedData = res.encryptedData;
                    params.iv = res.iv;
                    //调用登陆接口
                    that.sendRequest({
                      url: '/login',
                      data: params,
                      success: function (res) {
                        //cache userInfo...
                      }
                    })
                  },
                  fail: function (e) {
                    console.log(e);
                  }
                });
              } else {
                console.log('获取用户登录态失败!' + res.errMsg)
              }
            }
          });

后台步骤:

1) 跟据code换取用户session_key

拼接url参数:https://api.weixin.qq.com/sns/jscode2session?appid=xxx&secret=xxxx&js_code=xxxx&grant_type=authorization_code

请求方式:http get


返回结果:

{"session_key":"xxxxxxxx","openid":"xxxxxxxxxx"}


2) 使用解密工具类解密出明文,使用:AES/CBC/PKCS7Padding   AES方式解密

参数:encryptedData、sessionKey、iv


结果:

javax.crypto.BadPaddingException: pad block corrupted


但是紧接着第二次再走以上流程是可以正常解出明文用户信息的


过会再走以上流程第一次请求又是报这个错误

最后一次编辑于  2018-03-20  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

10 个回答

  • 阿润
    阿润
    2018-03-30

    我的也是出现这个错误,lz如果解决掉就分享下哦~

    2018-03-30
    赞同
    回复
  • 刘向
    刘向
    2018-04-04

    请问你的问题解决了吗,我这边也遇到这个问题了


    2018-04-04
    赞同
    回复
  • 🎵小山33
    🎵小山33
    2018-07-19

    楼主,我也遇到同样的问题。我是用button组件来getuserinfo的。能详细描述如何处理吗?

    2018-07-19
    赞同
    回复
  • 狂奔的蜗牛😄
    狂奔的蜗牛😄
    2018-09-20

    我也遇到这个问题 郁闷的很 大多数情况都可以解密 ,偶尔失败,我的是java后端

    2018-09-20
    赞同
    回复 1
    • June
      June
      05-08

      我遇到的也是这个问题,麻烦问下你解决了没?分享下经验

      05-08
      赞同
      回复
  • PA341单思义
    PA341单思义
    2018-10-06

    同样遇到这个错误,分享自己的解决方法,问题不在于解密的方法而是流程:

    1,第一次用wx.login 得到临时令牌再换取session_key

    2,下次调用wx.login方法之前需要用wx.checksession方法,如果是ok,那么第一步的session_key任然有效,可以解密用户信息和手机号码。如果是fail,则代表session_key在微信服务器上失效,需要重新用wx.login方法获取新的临时令牌换取新的session_key

    上面是我遇到问题解决的方法,如有不对,还请大家指出


    官方文档:

    https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html

    会话密钥 session_key 有效性

    开发者如果遇到因为 session_key 不正确而校验签名失败或解密失败,请关注下面几个与 session_key 有关的注意事项。

    1. wx.login 调用时,用户的 session_key 可能会被更新而致使旧 session_key 失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用 wx.login,并非每次调用都导致 session_key 刷新)。开发者应该在明确需要重新登录时才调用 wx.login,及时通过 code2Session 接口更新服务器存储的 session_key。

    2. 微信不会把 session_key 的有效期告知开发者。我们会根据用户使用小程序的行为对 session_key 进行续期。用户越频繁使用小程序,session_key 有效期越长。

    3. 开发者在 session_key 失效时,可以通过重新执行登录流程获取有效的 session_key。使用接口 wx.checkSession可以校验 session_key 是否有效,从而避免小程序反复执行登录流程。

    4. 当开发者在实现自定义登录态时,可以考虑以 session_key 有效期作为自身登录态有效期,也可以实现自定义的时效性策略。



    2018-10-06
    赞同
    回复 2
    • 自负
      自负
      01-22

      我和楼主用的方式是一样的 每次小程序都会给一个code session_key每次都是最新的不会出现无效


      意思是每次都是拿的最新的session_key  大概15次会出现一次这个错误

      01-22
      赞同
      回复
    • 平常心
      平常心
      03-27回复自负

      我的倒是不是这样情况,就是偶尔出现,也可以让它固定出现这种错误,在需要获取手机号的页面上无操作停留几分钟,再去调获取手机号等一系列操作,就会出现问题。崩溃的是,我每次的code都是wx.login获取的最新的,换取的session_key也是最新的,还是会出错,无解,朋友解决了吗?解决了,望告知!!

      03-27
      赞同
      回复
  • 自负
    自负
    01-22

    @341

    同样遇到这个错误,分享自己的解决方法,问题不在于解密的方法而是流程:

    1,第一次用wx.login 得到临时令牌再换取session_key

    2,下次调用wx.login方法之前需要用wx.checksession方法,如果是ok,那么第一步的session_key任然有效,可以解密用户信息和手机号码。如果是fail,则代表session_key在微信服务器上失效,需要重新用wx.login方法获取新的临时令牌换取新的session_key


    我和楼主用的方式是一样的 每次小程序都会给一个code session_key每次都是最新的不会出现无效

    01-22
    赞同
    回复
  • June
    June
    05-08

    问题有没有解决啊,麻烦分享下

    05-08
    赞同
    回复