在上文《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
[plain] view plain copyapi
注意: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服务器
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
把token返回的时候,能够作个约定,在返回的时候截取某个字符串的一部分做为密钥,这个秘钥只用一次,就是用来解密token的,之后就只是用token来作秘钥了。curl
整个过程以下:工具
一、用户名密码 + https + url签名(url+时间戳+随机字串)连接+请求时间+保惟一的字串
二、服务器返回token:aes(约定算法)=》(token+随机secret(就取上面那个签名中的16位))
三、app保存token后,之后每次机通讯都经过 aes (token + 内容) 传输post