在上文《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
curl -X POST \
-H "Token-Param:<時間戳>,<sdkversion>"\
-d ‘Base64Encode(AES(token, secretKey))’
http://test.com/api/login
secretKey就是密鑰,使用http header中的Token-Param中的16位長度。
服務端傳回時加密token的方法是用AES加密,密鑰是secretKey。
用戶端解密token的方法是用AES解密,密鑰是secretKey。
(3) api請求中的加密
假設更新使用者資料的api調用如下
-H ‘Token:Base64Encode(AES(token, secretKey))’
-d ‘Base64Encode(AES(date, token))’
http://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的内容,得到原文。
把token傳回的時候,可以做個約定,在傳回的時候截取某個字元串的一部分作為密鑰,這個秘鑰隻用一次,就是用來解密token的,以後就隻是用token來做秘鑰了。
http://blog.csdn.net/newjueqi/article/details/44177063
如何聯系我:【萬裡虎】www.bravetiger.cn
【QQ】3396726884 (咨詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/