收藏
回答

【疑似bug】EVP_DecryptFinal_ex:bad decrypt

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug api.weixin.qq.com/sns/jscode2session 微信iOS客户端 Android 开发者工具:1.02.1804251 微信:6.6.6 2.0.2






- 当前 Bug 的表现(可附上截图)


- 预期表现

可以对encryptedData正常解密。



- 复现路径

点击登录按钮后,小程序调用wx.login(),再将code、iv、encrypedData一起发往后端程序,后端程序调用微信api接口(api.weixin.qq.com/sns/jscode2session)希望获取openId,但经常会出现上图中的错误。


复现过程:

1、这个问题不是持续连续发生,而是在一段时间未操作小程序时,再次点击登录按钮触发登录操作的第一次时会发生,第二次及以后的登录操作则会成功。如果再过一段时间未操作小程序,当第一次登录的时候还是会出现这个现象——第一次登录不成功,后续登录操作可以成功。

2、问题的关键在于解密程序报错。将上述的ecryptedData、iv、session_key放入官方文档(貌似其中还有包括使用wx.getUserInfo()的描述,是否也要更新一下)中提供的demo.js程序运行,也会出现报错。


推测一下,会不会是encryptedData、iv或session_key数据不匹配导致解密失败。


目前只能在小程序端判断若出现Illegal Buffer Error这种情况,则再次自动发起认证。


类似的案例:

1、类似的这个问题

2、解密不完整的例子。

3、外站的例子:https://ruby-china.org/topics/32128

4、居然还有50%概率无法解密的情况

5、案例

6、这个帖子提出通过调用encodeURIComponent()函数对iv转换就没问题。经过尝试还是不行。

7、这位楼主解决了,但没写具体的方案。

8、提出要在刷新sessionkey 之后再拿 decryptData 就可解决。但没有代码示例。(http://www.2bmdzz.com/2017/10/16/wx-getshareinfo-encrypteddata-41003/)

9、2017年初就有人提过类似的问题

10、2016年提出的同类案例解密出现乱码的情况



- 提供一个最简复现 Demo


前端【登录按钮】按下后的函数:


后端 处理的处理函数


最后一次编辑于  2018-05-04
回答关注问题邀请回答
收藏

12 个回答

  • 另一蜘猪
    另一蜘猪
    2018-05-10

    或者你不要sessionkey了,再按了按钮的接收方法里面直接wx.login ,wx.getUserInfo

    2018-05-10
    有用 1
    回复
  • 另一蜘猪
    另一蜘猪
    2018-05-10

    这个没关系啊,你先checkSession一次,如果过期了就wx.login然后wx.getUserInfo,没过期就不用管。

    因为wx.getUserInfo只是不弹窗了,而用户如果按了按钮就表示方法里面执行时已经授权了

    2018-05-10
    有用 1
    回复 1
    • 2018-05-14
      谢谢,请问你的checksession是在index.js中的onload()中调用还是在app.js的onlunch()中调用
      2018-05-14
      回复
  • 乐楽樂
    乐楽樂
    2021-09-04

    同样问题。每次获取手机号需要用户授权两次才行。第一次基本是报错

    2021-09-04
    有用
    回复
  • 李晓峰
    李晓峰
    2019-07-22

    就这一个问题拖了我们许久的时间,都没有找到好的解决办法,因为这是偶发的,很难复现,但是新用户加入报错一直会出现

    2019-07-22
    有用
    回复
  • 念
    2018-11-07

    根据我自己的测试。给后来者一个提示。在用wx.login获取的code 再调用wx.getuserinfo 然后同时把数据发到后端。后端通过code得到的session_key 第一次解密就会失败

    2018-11-07
    有用
    回复 1
    • Cʜᴀɴɢᴇ
      Cʜᴀɴɢᴇ
      2019-10-14
      小程序多套一层wx.login 能行但是总感觉不科学
      2019-10-14
      回复
  • 琪
    2018-09-25

    同求官方支持

    2018-09-25
    有用
    回复
  • George (乔治)
    George (乔治)
    2018-05-17

    我也同样的问题,谢谢各位大神。现在就是button授权确认了以后再次调用wx.login和wx.getUserInfo。。。服务器上存session_key太绕了

    2018-05-17
    有用
    回复
  • 2018-05-10

    @另一蜘猪 我原来就是这么做的,现在wx.getUserInfo不是要“逐渐”废掉吗?官方关于wx.getUserInfo的帖子在这里

    以上问题,就是我在考虑不用wx.getUserInfo()的情况下登录时出现的问题。

    2018-05-10
    有用
    回复
  • 牛
    2018-05-10

    然而wx.getUserInfo将逐步被废弃

    2018-05-10
    有用
    回复
  • 另一蜘猪
    另一蜘猪
    2018-05-10

    调用wx。login之后sessionkey会发生变化,用发生变化的sessionkey去解密会失败,除非上一个还没失效,一般是wx.login之后再调用个wx.getUserInfo重新获取加密信息,再解密

    2018-05-10
    有用
    回复

正在加载...

登录 后发表内容