微信小程序授权登录解密失败问题


参考:https://developers.weixin.qq.com/community/develop/doc/000eccdd7a8508e386e69b3025bc00

public  String decrypt(byte[] key, byte[] iv, byte[] encData) throws Exception {
    AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
    cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
    //解析解密后的字符串
    return new String(cipher.doFinal(encData),"UTF-8");//这里抛出异常
}

抛异常:javax.crypto.BadPaddingException: Given final block not properly padded
或者:pad block corrupted

亲测有效解决方案:和前端确认调用顺序。

顺序应该是  1、wx.login    2、wx.getUserInfo 。 

如果顺序反过来 ,会出现校验解密失败的问题,比较坑的是 不是每次都出错。

PS :

通过wx.login获得用户授权码code,接下来我们用code以及appid和appSecret请求微信 https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 获取session_key,而session_key又是解密encryptedData的密钥,所以一旦我们先调wx.getUserInfo再调wx.login获取,code已经被刷新了,所以钥匙就不是对应开锁的钥匙了。

参考:https://www.jianshu.com/p/9b6b9942d96a


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM