安全篇-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解密即可。
詳細的流程圖可以檢視下圖。
客戶端-伺服器端HTTPS資料傳輸流程圖
注意事項:
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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。
相關文章
- nodejs常用加密方式 RSA & AESNodeJS加密
- php中aes加密和rsa加密的區別PHP加密
- RSA der加密 p12解密以及配合AES使用詳解加密解密
- 前後端API互動資料加密——AES與RSA混合加密完整例項後端API加密
- AES加密加密
- 【5】JMicro其於RSA及AES加密實現安全服務呼叫加密
- Golang AES加密Golang加密
- AES加密解密加密解密
- AES 加密&解密加密解密
- RSA加密加密
- Vue使用AES加密Vue加密
- AES CBC 加密解密加密解密
- javascript RSA 加密JavaScript加密
- AES-CBC 模式加密模式加密
- https加密機制HTTP加密
- Java實現AES和RSA演算法Java演算法
- C# RSA 加密C#加密
- RSA加密與解密加密解密
- Python AES 加密和解密(qbit)Python加密解密
- golang AES-CBC 加密解密Golang加密解密
- python AES-CBC 加密解密Python加密解密
- 逆向工程加密函式:AES加密函式
- RSA加密演算法加密演算法
- RSA加密遇到的坑加密
- 十分鐘看懂AES加密加密
- Java AES加密和解密教程 - BaeldungJava加密解密
- php rsa長文加密解密PHP加密解密
- framewrok RSA SHA512加密加密
- RSA 非對稱加密&解密加密解密
- AES位元組陣列加密解密流程陣列加密解密
- delphi加密C#解密(AES-256)加密C#解密
- HTTPS 加密與認證機制HTTP加密
- 對稱加密、非對稱加密、RSA(總結)加密
- AES線上加密解密-附AES128,192,256,CBC,CFB,ECB,OFB,PCBC各種加密解密原始碼加密解密原始碼
- 前後端(PHP)使用AES對稱加密後端PHP加密
- Android、Java RSA加密踩坑記AndroidJava加密
- RSA加密原理&密碼學&HASH加密密碼學
- RSA加密解密示例程式碼加密解密