今天在開發小程序獲取微信綁定的手機號時遇到異常: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加密的數據。