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后端”文章。
【作者】曾健生
【QQ】190678908
【app后端qq群】254659220
【微信公众号】 appbackend
【新浪微博】 @newjueqi
【博客】http://blog.csdn.net/newjueqi
版权声明:本文为博主原创文章,未经博主允许不得转载。
17.app后端如何保证通讯安全--aes对称加密的更多相关文章
- 16.app后端如何保证通讯安全--url签名
app和后端的通讯过程中,api请求有可能被别人截取或不小心泄露.那么,怎么保证api请求的安全呢?在这篇文章中,介绍一种常见的保证api请求安全的做法--url签名. 1. url签名详解 在前一篇 ...
- 正确使用AES对称加密
正确使用AES对称加密 经常我看到项目中有人使用了对称加密算法,用来加密客户或项目传输中的部分数据.但我注意到开发 人员由于不熟悉原理,或者简单复制网上的代码示例,有导致代码存在安全风险. 我经常遇到 ...
- AES对称加密和解密
package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...
- AES对称加密
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre ...
- java的AES对称加密和解密,有偏移量
import java.math.BigDecimal; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; i ...
- AES对称加密和解密(转)
AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...
- JAVA中AES对称加密和解密
AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...
- AES对称加密解密类
import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...
- app后端设计(4)-- 通讯的安全性
在app的后台设计中,一个很重要的因素是考虑通讯的安全性. 因此,我们需要考虑的要点有: 1. 在app和后台,都不能保存任何用户密码的明文 2. 在app和后台通讯的过程中,怎么保证用户信息的安全性 ...
随机推荐
- 30多种iOS常用动画
转自:http://blog.csdn.net/zhibudefeng/article/details/8691567 // // CoreAnimationEffect.h // CoreAni ...
- android gif动画开源框架android-gif-drawable
地址:https://github.com/koral--/android-gif-drawable github里介绍挺详细的 项目中需要显示gif图片,并对用户体验有较高的要求,之前一直在使用 ...
- VMWare安装Ubuntu装完之后安装VMtools
今天搭建Hadoop环境,在虚拟机中安装了Ubuntu系统,但是Windows系统不能给虚拟机系统传输文件,很是不方便.在网上找了很久,也是过了很多办法,但是下面的方式是可行的,希望对读者有帮助. 第 ...
- LeetCode之旅(17)-Ugly Number
题目: Write a program to check whether a given number is an ugly number. Ugly numbers are positive num ...
- wave音频格式一窥
学习需要不断的刨根问底,首先,RIFF是微软多媒体格式的一个规范. 其次,有很多用C++实现wave解析的好文章.
- 基于 HTML5 Canvas 的工控机柜 U 位动态管理
前言 U 是一种表示服务器外部尺寸的单位,是 unit 的缩略语,详细的尺寸由作为业界团体的美国电子工业协会(EIA)所决定.之所以要规定服务器的尺寸,是为了使服务器保持适当的尺寸以便放在铁质或铝质的 ...
- SDL相关资料
SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适用于 游戏.游戏SDK.演示软件.模拟器.MPEG播放器和其他应用软件.目前支持windows,linux ...
- php根据地球上任意两点的经纬度计算两点间的距离 原理
地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为6356.755千米,平均半径6371.004千米.如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R.如 ...
- Mysql-单表查询的操作和注意事项
一. 单表查询的语法 二 .关键字的执行优先级(重点) 三 .简单查询 四 .WHERE约束 五. 分组查询:GROUP BY 六 .HAVING过滤 七 .查询排序:ORDER BY 八 .限制查询 ...
- Java基础:Java的四种引用
在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用.包括:强引用,软引用,弱引用,虚引用.这篇博客将详细的讲解一下这四种引用. 1. 强引用 2. 软引用 3. 弱引用 4. 虚 ...