[BUG]shareTicket解密bug
发布于 5 年前 作者 jiangfang 823 次浏览 来自 问答

转发页面到群里,拿到shareTicket后,用wx.getShareInfo()获取到encryptedData 和 iv,传到后端进行解密,每两分钟就解密失败之后除非重新用wx.login()获取code刷新后端的sessionkey,否则一直解密失败,怀疑是sessionkey失效,但是用wx.checksession()获取到的是没失效的。

请问wx.getShareInfo()拿到的数据为什么两分钟就失效了呢?

10 回复

@土豆豆 是由于引入的第三方的sdk内私自使用的wx.login()导致存在服务端的sessionkey失效 这个是啥意思

我的代码中,有时候解密成功,有时候报错: javax.crypto.BadPaddingException: pad block corrupted,不知什么原因?

@吴剑波 是立即解密的,我的问题是,每次转发后拿到信息传给后端解密,前两分钟,解密都可以通过,两分钟后就解密失败,这个两分钟不是指拿到数据后隔了两分钟才去解密,而是过了两分钟重新获取shareTicket重新wx.getShareInfo()拿到数据去解密,就会解密失败,并且重新登录后正常

@阿勇 后端解密信息需要使用wx.login()的code换取的sessionkey来解密,如果在这之前,前端又一次的调用了wx.login(),后端已经保存的sessionkey会失效,需要重新保存的。

可能是你的代码的执行顺序哪里出了问题,我这边只要保证 getSessionKey 之后再获取加密信息,解密就一定会成功。这一点是有测试和成千上万线上小程序保证的,不太会出问题。

@土豆豆   每次login时都有保存  sessionkey

@福peter  检查下代码中是否有地方重新调用了wx.login()的地方吧,这个会导致sessionkey失效,导致解密失败

有重新保存,但是还是解密异常,能否提供一下C# 解密方法

找到原因,开发者工具和手机同时测试时,两者的sessionKey可能有干扰,尽管openId是一样的。

getShareInfo 获取到的信息需要立即解密,建议保存解密后的结果而不是加密信息。

回到顶部