安全篇-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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。
相關文章
- 【安全篇】在iOS中使用MD5+AES+RSA打造堅固通訊傳輸加密iOS加密
- nodejs常用加密方式 RSA & AESNodeJS加密
- php中aes加密和rsa加密的區別PHP加密
- python實現aes加密解密,RSA簽名和驗籤,RSA加密解密,並呼叫介面Python加密解密
- RSA der加密 p12解密以及配合AES使用詳解加密解密
- iOS資料加密(Base64,雜湊函式,AES,RSA)iOS加密函式
- 前後端API互動資料加密——AES與RSA混合加密完整例項後端API加密
- AES加密加密
- 【5】JMicro其於RSA及AES加密實現安全服務呼叫加密
- Golang AES加密Golang加密
- AES加密解密加密解密
- RSA加密加密
- 常用加密解密演算法【RSA、AES、DES、MD5】介紹和使用加密解密演算法
- AES CBC 加密解密加密解密
- 資訊保安第一次作業,AES CBC加密,RSA金鑰簽名加密
- javascript RSA 加密JavaScript加密
- AES-CBC 模式加密模式加密
- PHP的AES加密類PHP加密
- Java實現AES和RSA演算法Java演算法
- Android資料加密之Aes加密Android加密
- RSA加密與解密加密解密
- C# RSA 加密C#加密
- RSA加密檔案加密
- golang AES-CBC 加密解密Golang加密解密
- 逆向工程加密函式:AES加密函式
- JAVA AES 加密 親測可用Java加密
- JAVA中AES加密和解密Java加密解密
- RSA加密遇到的坑加密
- RSA加密演算法加密演算法
- php rsa長文加密解密PHP加密解密
- Android資料加密之Rsa加密Android加密
- 十分鐘看懂AES加密加密
- python AES-CBC 加密解密Python加密解密
- Java AES加密和解密教程 - BaeldungJava加密解密
- php ios通用的AES加密方法PHPiOS加密
- OICQ脆弱的加密機制加密
- RSA 非對稱加密&解密加密解密
- 常用加解密工具類(MD5、SHA、DES、AES、RSA)解密