安全篇-AES/RSA加密機制

在服務器與終端設備進行HTTP通訊時,常常會被網絡抓包、反編譯(Android APK反編譯工具)等技術得到HTTP通訊接口地址和參數。爲了確保信息的安全,我們採用AES+RSA組合的方式進行接口參數加密和解密。

1.關於RSA加密機制:公鑰用於對數據進行加密,私鑰對數據進行解密,兩者不可逆。公鑰和私鑰是同時生成的,一一對應。比如:A擁有公鑰,B擁有公鑰和私鑰。A將數據通過公鑰進行加密後,發送密文給B,B可以通過私鑰和公鑰進行解密。

2.AES加密也叫對稱加密:A用密碼對數據進行AES加密後,B用同樣的密碼對密文進行AES解密。


具體操作方法:

1.在終端中採用openssl方式輸入密鑰的相關屬性(公司名、郵箱等),然後在終端當前所在的地址下,生成公鑰和私鑰共7個文件(7個文件如何使用請看附錄的拓展了鏈接)。

2.此時假設Android客戶端擁有公鑰PublicKey,服務器端擁有公鑰PublicKey和私鑰PrivateKey。

3.安卓發送請求到服務器端:安卓隨機生成Byte[]隨機密碼,假設RandomKey=“123456”,通過AES算法,對Json數據利用進行加密。

4.但是此刻服務器並不知道客戶端的RandomKey是什麼,因此需要同時將Randomkey傳給服務器,否則服務器無法通過AES對Json數據進行解密。但是如果直接發送請求,Randomkey就會暴露,所以要對RandomKey進行不可逆的RSA加密。

5.安卓將使用Randomkey進行AES加密的Json數據,和使用PublicKey進行RSA加密的RandomKey通過HTTP傳送到服務器端。數據請求工作完成。

6.服務器端接收到AES加密的Json數據和Rsa加密的RandomKey數據。

7.服務器通過私鑰PrivateKey對加密後的RandomKey進行Rsa解密。得到安卓生成的原始Randomkey。

8.利用原始的RandomKey對加密後的Json數據進行AES對稱解密。至此已經得到安卓端發過來的原始Json數據。進行常規的服務器業務操作,然後將返回數據通過安卓端的RandomKey進行AES加密gouhou後,Response返回。

9.安卓端接收到Response的數據後,利用之前本地生成的RandomKey直接進行AES解密即可。

詳細的流程圖可以查看下圖。


注意事項:

1.在實際的開發過程中,發現RSA和AES有不同的密文生成標準,會不兼容IOS。IOS在RSA算法中需要的公鑰與JAVA不同。詳細的解決方案請查看:http://www.cnblogs.com/makemelike/articles/3802518.html

2.AES加密不可以使用超過128Byte的KEY,因爲在jdk1.7以上的版本不支持超過128Byte的KEY。

小結:從性能上來測,整個客戶端送加密數據開始到解密得到回傳的原始數據不超過300ms(Iphone4和Centos Java服務器傳輸測試)。本方案沒有采用TOKEN的方式,或許以後用到。公鑰如何更新也需要繼續完善。

附:具體的JAVA和IOS加密解密Demo遲點整理給出。

原文地址:https://www.jianshu.com/p/ec7bb7325ff2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章