今天在开发小程序获取微信绑定的手机号时遇到异常:javax.crypto.BadPaddingException: pad block corrupted
折腾半天,突然想到是因为:
- 先通过getPhoneNumber获取了手机号的加密数据。
- 然后才调用的wx.login获取code。
- 再通过code取到用户的session_key 。
- 最后再用session_key,手机号的加密数据和向量解密获取手机号。
正确的做法应该是:
- 先才调用的wx.login获取code
- 然后再通过code取到用户的session_key 。
- 再通过getPhoneNumber获取了手机号的加密数据。
- 最后再用session_key,手机号的加密数据和向量解密获取手机号。
改完之后果然就没有问题。
这是因为调用了wx.login后通过code获得的session_key是新的session_key.
所以,在调用wx.login之前获的加密数据不是用新得session_key加密的数据。
在调用wx.login之后获得的加密数据,才是新得的session_key加密的数据。