1. 程式人生 > >網絡請求中常見的加密機制和加密算法理解

網絡請求中常見的加密機制和加密算法理解

還原 查找 判斷 客戶 只需要 tle 共享 www. .cn

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

  token:已登陸用戶的識別碼
    解決的問題:用戶調用接口時,不用每次都帶上用戶名和密碼,避免了頻繁在網絡中傳輸密碼被截獲的風險。
    使用場景:用戶登錄系統時傳入用戶名和密碼,服務器校驗成功之後,根據uuid等參數生成token返回給客戶端,同時把該token和該用戶的對應關系緩存在服務器端。客戶端在後續的請求接口中不用每次都傳入用戶名和密碼,只需要傳入token即可。服務器會根據token確定客戶端的身份。
    註意:token可設置生效時間,token失效之後,客戶端重新請求token。

  sign

:接口body的簽名
    解決問題:避免請求參數被惡意修改。保證了請求數據的一致性。
    使用場景:客戶端和服務端約定一個簽名生成算法。客戶端在請求接口之前調用簽名算法,根據參數生成sign值。然後把sign和請求參數一並傳給服務器。
    服務器收到到參數和簽名之後,根據請求參數,調用簽名算法計算出簽名,然後比較該簽名和客戶端傳過來的簽名是否一致,如果一致,則說明請求參數未被修改過,如果不一致,則說明請求參數被修改過。

  nonce:請求中附帶的隨機數
    解決問題:防止惡意程序重復向服務器重復發送相同的請求。
    使用場景:客服端在向服務器發出請求之前,隨機生成nonce參數。服務器在接收到請求之後,取出nonce參數,然後去緩存中查找是否已存在nonce的值。如果存在,則說明該請求已經收到過,則 拒絕本次請求,如果不存在,則說明首次接收到該請求,正常進行處理。

  timestamp:客服端發送請求的時間戳(timestamp一般和nonce組合使用)
    解決的問題:防止服務器端緩存nonce數據量過大的問題。當服務器緩存的nonce較多時,每次查找nonce就會耗費大量時間。通過添加請求時間戳,判斷請求時間到服務器接收到請求的時間差是否在有效處理時間內(例如5分鐘),如果在5分鐘之內則進行處理,如果超出五分鐘則拒絕該請求。這樣,服務器端在緩存nonce的時候,可以設置nonce的緩存時間為5分鐘,超出5分鐘之後,自動清除掉緩存中的nonce,這樣就避免了緩存大量nonce的問題。

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

數據保密性: http請求的數據無論是GET還是POST都可能會被抓包獲取到數據。為了避免用戶的敏感數據被竊取,則需要對數據進行加密處理。

  AES:對稱加密算法
    使用方式:客服端和服務器端共同確定一個用來加密和解密的秘鑰。然後客服端在請求服務器是通過該秘鑰對數據進行加密,服務器端在接收到請求之後使用該秘鑰對數據進行解密。
    優勢:加密效率高
    缺點:秘鑰需要共享給客戶端,具有泄露的風險


  RSA:非對稱加密算法
    使用方式:服務器端生成公鑰和私鑰,把私鑰發送給客戶端。客服端在請求服務器是,通過公鑰對數據進行加密。服務器端接收到請求之後,使用私鑰對加密的數據進行解密。
    優勢:不需要共享私鑰,避免了私鑰泄露的風險。
    劣勢:加密效率低,數據量大是較為耗時

  實際場景中,一般使用如下策略進行加密:
      服務器端通過RSA生成公鑰,然後把公鑰給客戶端。客服端在請求服務器前, 隨機生成AES秘鑰,然後用AES秘鑰加密請求數據。之後用RSA公鑰對AES秘鑰進行加密,然後把加密之後的AES秘鑰和加密後的請求數據一起發送給服務器。服務器收到請求之後,先用RSA私鑰解密出AES秘鑰,然後用AES秘鑰對請求數據進行解密,獲取請求數據。

其他常見算法說明:
   MD5:信息摘要算法,不是加密算法
      加密算法需要能夠解密出原始數據的。MD5是不可逆的,不存在解密的說法。MD5的目的是用來校驗文件/數據是否和原始數據一致,是否被修改過。只要文件/數據被修改過,則計算出的MD5就不一致。SHA-1類似,可以從來文件校驗和計算數字簽名。
      應用場景:作為計算sign簽名的算法,校驗數據的一致性

  Base64:編碼規範,不是加密算法
      其存在的目的是為了解決部分網絡傳輸不支持不可見字符的問題。通過Base64編碼把數據流轉化為可打印顯示的字符,之後通過網絡進行傳輸。既然是編碼,那麽就可以被解碼還原的。其類似於URL編碼,為了把一些特殊字符轉化為安全字符。
      應用場景:RSA的公鑰為byte數組,在傳給客戶端的時候 ,就可以通過Base64編碼把byte數組轉換為字符串,然後傳給客戶端。

=========================================

原文鏈接:網絡請求中常見的加密機制和加密算法理解

=========================================

----end--

網絡請求中常見的加密機制和加密算法理解