通過使用JDK默認AES工具加解密數據出現Illeage key size的異常

簡述

在網絡中傳遞數據時,我們多少都會做出一些加密操作,並非直接將明文數據在網絡中傳輸,多數都會通過簡單的對稱加密操作,傳遞密文。這樣做的好處可以避免在請求被抓包或者攔截的同時,將重要信息暴露給「敵人」,保證了用戶的數據安全。

實際案例

最近在做公司接入百度API獲取用戶信息,百度提供的用戶信息,採用了對稱加密算法,進行了加密處理(雖然與微信採用了相同的加密方式,但是不同的是,百度加密的數據包含有補位字符需要移除後纔會得到真實的數據)。使用百度提供的解密方式,本地解密成功,但是在公司測試環境上無法解密,查看日誌後。發現發生了個如下異常:
在這裏插入圖片描述經過排查和查閱,最終定位爲JDK默認的解密工具問題(AES算法)只支持128位,百度的長度爲192超出了範圍。同時百度API也對此有說明:
在這裏插入圖片描述本人開發時採用的JDK8-221的版本,不會出現類似問題,測試環境的JDK8-131存在上述問題。通過替換本地JDK爲131後,復現了測試環境的問題,由此證明和JDK版本有關聯。

解決方式有兩種:

  • 升級JDK。測試環境升級沒有問題,可是線上發佈同樣需要升級,這就涉及到了大量的功能點和項目迴歸測試,代價較高!
  • 替換 jar 包。按照官網的提示替換 /jre/lib/security 目錄下的: local_policy.jar 和 US_export_policy.jar(版本對應上噢~)。這追改做法不會涉及大量的項目迴歸和功能迴歸。推薦使用這種方式。