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

 

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


[plain] view plain copyapi

  1. curl -X POST \  
  2. -H "Token-Param:<時間戳>,<sdkversion>"\  
  3. -d  ‘Base64Encode(AES(token, secretKey))’  
  4. 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調用以下

[plain] view plain copy服務器

  1. curl -X POST \  
  2. -H "Token-Param:<時間戳>,<sdkversion>"\  
  3. -H  ‘Token:Base64Encode(AES(token, secretKey))’  
  4. -d  ‘Base64Encode(AES(date, token))’  
  5. 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的內容,獲得原文。
 app

3.對稱加密方法的總結

 

  把token返回的時候,能夠作個約定,在返回的時候截取某個字符串的一部分做爲密鑰,這個祕鑰只用一次,就是用來解密token的,之後就只是用token來作祕鑰了。curl

 

        整個過程以下:工具

一、用戶名密碼 + https + url簽名(url+時間戳+隨機字串)連接+請求時間+保惟一的字串
二、服務器返回token:aes(約定算法)=》(token+隨機secret(就取上面那個簽名中的16位))
三、app保存token後,之後每次機通訊都經過  aes (token + 內容)  傳輸post

相關文章
相關標籤/搜索