在網絡中傳遞數據時,我們多少都會做出一些加密操作,並非直接將明文數據在網絡中傳輸,多數都會通過簡單的對稱加密操作,傳遞密文。這樣做的好處可以避免在請求被抓包或者攔截的同時,將重要信息暴露給「敵人」,保證了用戶的數據安全。
最近在做公司接入百度API獲取用戶信息,百度提供的用戶信息,採用了對稱加密算法,進行了加密處理(雖然與微信採用了相同的加密方式,但是不同的是,百度加密的數據包含有補位字符需要移除後纔會得到真實的數據)。使用百度提供的解密方式,本地解密成功,但是在公司測試環境上無法解密,查看日誌後。發現發生了個如下異常:
經過排查和查閱,最終定位爲JDK默認的解密工具問題(AES算法)只支持128位,百度的長度爲192超出了範圍。同時百度API也對此有說明:
本人開發時採用的JDK8-221的版本,不會出現類似問題,測試環境的JDK8-131存在上述問題。通過替換本地JDK爲131後,復現了測試環境的問題,由此證明和JDK版本有關聯。
解決方式有兩種:
local_policy.ja
r 和 US_export_policy.jar
(版本對應上噢~)。這追改做法不會涉及大量的項目迴歸和功能迴歸。推薦使用這種方式。