Android 網絡交互之移動端與服務端的加密處理

在開發項目的網絡模塊時,咱們爲了保證客戶端(Client)和服務端(Server)之間的通訊安全,咱們會對數據進行加密。算法

談到網絡通訊加密,咱們能夠說出:對稱加密,非對稱加密,md5單向加密,也能提到RSA,AES128,以及MD5等專業名詞。數組

下面咱們就來講明客戶端(Client)與服務端(Server)的加密通訊邏輯。緩存

1、加密相關名詞解析

  • RSA:非對稱加密,會產生公鑰和私鑰,公鑰在客戶端,私鑰在服務端。公鑰用於加密,私鑰用於解密。
  • AES:對稱加密,直接使用給定的祕鑰加密,使用給定的祕鑰解密。(加密解密使用相同的祕鑰)。
  • MD5:一種單向的加密方式,只能加密,不能解密。
  • Base64編碼:對字節數組轉換成字符串的一種編碼方式。

2、通訊加密的邏輯

2.1 明文傳輸通訊邏輯(不安全)

1). 客戶端將要上傳的數據以字典(Map)的方式打包,Post提交給服務器。安全

2). 服務器接收提交的數據包,經過Key-Value的形式獲取客戶端提交的值,進行處理。服務器

3). 處理結束,將數據以字典(Map)的形式打包,返回給客戶端處理。網絡

2.2 加密傳輸通訊邏輯

總體流程:客戶端上傳數據加密 ==> 服務器獲取數據解密 ==> 服務器返回數據加密 ==> 客戶端獲取數據解密。ui

3、通訊請求安全性實現方案

請求安全性主要體現爲: 服務器端在接收到請求的時候,要主動鑑別該請求是否有效,是否可接受。編碼

經常使用方案以下:加密

3.1 使用 token 已登錄用戶的識別碼

解決問題:

用戶調用接口時,不用每次都帶上用戶名和密碼,避免了頻繁在網絡中傳輸密碼被截獲的風險。spa

使用場景:

用戶登陸系統時傳入用戶名和密碼,服務器校驗成功以後,根據uuid等參數生成token返回給客戶端,同時把該token和該用戶的對應關係緩存在服務器端。客戶端在後續的請求接口中不用每次都傳入用戶名和密碼,只須要傳入token便可。服務器會根據token肯定客戶端的身份。

注意事項:

token可設置生效時間,token失效以後,客戶端從新請求token。

3.2 sign:請求參數的簽名

解決問題:

避免請求參數被惡意修改。保證了請求數據的一致性。

使用場景:

客戶端和服務端約定一個簽名生成算法。客戶端在請求接口以前調用簽名算法,根據參數生成sign值。而後把sign和請求參數一併傳給服務器。服務器收到到參數和簽名以後,根據請求參數,調用簽名算法計算出簽名,而後比較該簽名和客戶端傳過來的簽名是否一致,若是一致,則說明請求參數未被修改過,若是不一致,則說明請求參數被修改過。

3.3 nonce:請求中附帶的隨機數

解決問題:

防止惡意程序重複向服務器重複發送相同的請求。

使用場景:

客服端在向服務器發出請求以前,隨機生成nonce參數。服務器在接收到請求以後,取出nonce參數,而後去緩存中查找是否已存在nonce的值。若是存在,則說明該請求已經收到過,則 拒絕本次請求,若是不存在,則說明首次接收到該請求,正常進行處理。

3.4 timestamp:客服端發送請求的時間戳

timestamp機制通常和nonce組合使用

解決的問題:

防止服務器端緩存nonce數據量過大的問題。當服務器緩存的nonce較多時,每次查找nonce就會耗費大量時間。經過添加請求時間戳,判斷請求時間到服務器接收到請求的時間差是否在有效處理時間內(例如5分鐘),若是在5分鐘以內則進行處理,若是超出五分鐘則拒絕該請求。這樣,服務器端在緩存nonce的時候,能夠設置nonce的緩存時間爲5分鐘,超出5分鐘以後,自動清除掉緩存中的nonce,這樣就避免了緩存大量nonce的問題。

使用場景:

客服端在發出請求時,附帶timestamp,記錄下當前的請求時間。服務器接收到請求時,取出timestamp,判斷和當前的時間差,若是超出必定的時間(例如5分鐘),則放棄該請求。若是在5分鐘以內,則取出nonce,去緩存中查找nonce,若是已存在則拒絕掉,若是不存在則正常處理。

4、通信的數據保密性

數據保密性: http請求的數據不管是GET仍是POST均可能會被抓包獲取到數據。爲了不用戶的敏感數據被竊取,則須要對數據進行加密處理。

1. AES:對稱加密算法

使用方式:

客服端和服務器端共同肯定一個用來加密和解密的祕鑰。而後客服端在請求服務器是經過該祕鑰對數據進行加密,服務器端在接收到請求以後使用該祕鑰對數據進行解密。

優點:

加密效率高

缺點:

祕鑰須要共享給客戶端,具備泄露的風險

2.RSA:非對稱加密算法

使用方式:

服務器端生成公鑰和私鑰,把私鑰發送給客戶端。客服端在請求服務器是,經過公鑰對數據進行加密。服務器端接收到請求以後,使用私鑰對加密的數據進行解密。

優點:

不須要共享私鑰,避免了私鑰泄露的風險。

劣勢:

加密效率低,數據量大時較爲耗時

相關文章
相關標籤/搜索