微信小程序授權登錄解密失敗問題


參考: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