1. 程式人生 > >17.app後端如何保證通訊安全--aes對稱加密

17.app後端如何保證通訊安全--aes對稱加密

在上文《16.app後端如何保證通訊安全--url簽名》提到,url簽名有兩個缺點,這兩個缺點,如果使用對稱加密方法的話,則完全可以避免這兩個缺點。在本文中,會介紹對稱加密的具體原理,和詳細的方案,使app通訊更加安全。


1.對稱加密的原理



  採用單鑰密碼系統的加密方法,同一個金鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也稱為單金鑰加密。


  其實很簡單,假設有原始資料"1000", 把1000加5就得到密文"1005",得到密文"1005"後減5就得到原始資料"1000"。把原始資料加5就是加密演算法,把密文減5就是解密演算法,金鑰就是5。


  本文所用的是AES這種通用的對稱加密演算法。


2. api請求中AES演算法的應用



  (1)curl簡介


  在下面的例子中,會使用curl工具,先簡單介紹一下。


  curl是利用URL語法在命令列方式下工作的開原始檔傳輸工具。


  用到的引數:


  -X: 指定什麼命令,例如post,get等。

  -H: 指定http header。

  -d: 制定http body的內容


  (2)怎麼保證token在初次返回時的安全


  用下面的api返回加密的token


  curl -X POST \
  -H "Token-Param:<時間戳>,<sdkversion>"\
  -d  ‘Base64Encode(AES(token, secretKey))’
  https://test.com/api/login

注意:Token-Param是自己定義的http header,這裡是因為個人習慣才命名為Token-Param


  secretKey就是金鑰,使用http header中的Token-Param中的16位長度。


  服務端返回時加密token的方法是用AES加密,金鑰是secretKey。


  客戶端解密token的方法是用AES解密,金鑰是secretKey。


  (3) api請求中的加密


  假設更新使用者資料的api呼叫如下

  curl -X POST \
  -H "Token-Param:<時間戳>,<sdkversion>"\
  -H  ‘Token:Base64Encode(AES(token, secretKey))’
  -d  ‘Base64Encode(AES(date, token))’
  https://test.com/api/user/update

  secretKey使用http header中的Token-Param中的16位長度。


  在上面的例子中,data是實際要post的資料。

  在這個過程中,token和post的資料都得到了加密保護。


  客戶端傳送時加密的過程


  (1)取http header中的Token-Param中的16位長度作為金鑰,用AES加密token。

  (2)用token作為金鑰,用AES加密data。


  服務端接收到這個api請求的解密過程:


  (1)取http header中的Token-Param中的16位長度作為金鑰,用AES解密, 得到token。

  (2)用token作為金鑰,用AES解密http body的內容,得到原文。

3.對稱加密方法的總結


  把token返回的時候,可以做個約定,在返回的時候擷取某個字串的一部分作為金鑰,這個祕鑰只用一次,就是用來解密token的,以後就只是用token來做祕鑰了。

        整個過程如下:

1、使用者名稱密碼 + https + url簽名(url+時間戳+隨機字串)連結+請求時間+保唯一的字串
2、伺服器返回token:aes(約定演算法)=》(token+隨機secret(就取上面那個簽名中的16位))
3、app儲存token後,以後每次機通訊都通過  aes (token + 內容)  傳輸

----------------------------------------------------------

        本人把網路上發表的一系列“app後端”文章加以整理並增加了運維和架構方面的內容,出版了書籍《App 後臺開發運維和架構實踐》,該書已在京東,噹噹和亞馬遜上銷售。

《App後臺開發運維和架構實踐》的購買連結

京東

京東 
噹噹 
亞馬遜 
互動出版網 
天貓

---------------------------------------------------------------------------------------------------------------------------

開啟連結  app後端系列文章總目錄 總目錄 ,能檢視本人發表過的所有原創“app後端”文章。

【作者】曾健生
【QQ】190678908
【app後端qq群】254659220 
【微信公眾號】 appbackend
【新浪微博】 @newjueqi
【部落格】http://blog.csdn.net/newjueqi