问题:
在微信小程序获取到 encryptedData, sessionKey, iv 后,对获取到的用户信息进行解密的时候出现“javax.crypto.IllegalBlockSizeException: last block incomplete in decryption”的错误
解决:
1.(无用的操作)首先在网上搜,基本没有什么有用的回答,基本上都回答说传的数据有问题,微信传输的数据不太可能出问题
2.(无用的操作)还有的说是jre虚拟机中的解密算法不对,需要在我们的jdk中添加两个jar包,我当时深信是这个问题,但经过一系列的操作之后,将两个jar包导入后java直接运行不起来了,然后看网上说只有“java.security.InvalidKeyException Illegal key size”这个问题才是jdk的问题,直接pass
3.(解决)我们前端获取到的 encryptedData, sessionKey, iv 这三个数据是没问题的,但前端传给我们后端后,进行打印发现字符串的 “+ ” 全部变成了空格,这样数据肯定是有问题的,我们后端要进行数据的处理,将 空格 变成 “+”,这样数据才是正确的(如果更改后运行还是报这个错误,看4)
4.(解决)如果进行了 3 确定数据传输过来后 ,数据没问题 , 还是报这个错误 ,那么要确定前端获取 sessionKey 和 encryptedData , iv 的顺序是否正确,一定要先获取到sessionKey在获取到 encryptedData , iv ,而且在获取到这三个数据后,前端在我们进行解密前不能再次调用wx.login,如果再次调用了,那么sessionKey就会改变,还是无法解密
补充:
使用的“解密工具类”是复制的下面文章的代码