17.app後端如何保證通訊安全--aes對稱加密
阿新 • • 發佈:2019-01-08
在上文《16.app後端如何保證通訊安全--url簽名》提到,url簽名有兩個缺點,這兩個缺點,如果使用對稱加密方法的話,則完全可以避免這兩個缺點。在本文中,會介紹對稱加密的具體原理,和詳細的方案,使app通訊更加安全。
採用單鑰密碼系統的加密方法,同一個金鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也稱為單金鑰加密。
其實很簡單,假設有原始資料"1000", 把1000加5就得到密文"1005",得到密文"1005"後減5就得到原始資料"1000"。把原始資料加5就是加密演算法,把密文減5就是解密演算法,金鑰就是5。
本文所用的是AES這種通用的對稱加密演算法。
(1)curl簡介
在下面的例子中,會使用curl工具,先簡單介紹一下。
curl是利用URL語法在命令列方式下工作的開原始檔傳輸工具。
用到的引數:
-X: 指定什麼命令,例如post,get等。
-H: 指定http header。
-d: 制定http body的內容
(2)怎麼保證token在初次返回時的安全
用下面的api返回加密的token
secretKey就是金鑰,使用http header中的Token-Param中的16位長度。
服務端返回時加密token的方法是用AES加密,金鑰是secretKey。
客戶端解密token的方法是用AES解密,金鑰是secretKey。
(3) api請求中的加密
假設更新使用者資料的api呼叫如下
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的內容,得到原文。
【QQ】190678908
【app後端qq群】254659220
【微信公眾號】 appbackend
【新浪微博】 @newjueqi
【部落格】http://blog.csdn.net/newjueqi
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