在上文《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对称加密的更多相关文章

  1. 16.app后端如何保证通讯安全--url签名

    app和后端的通讯过程中,api请求有可能被别人截取或不小心泄露.那么,怎么保证api请求的安全呢?在这篇文章中,介绍一种常见的保证api请求安全的做法--url签名. 1. url签名详解 在前一篇 ...

  2. 正确使用AES对称加密

    正确使用AES对称加密 经常我看到项目中有人使用了对称加密算法,用来加密客户或项目传输中的部分数据.但我注意到开发 人员由于不熟悉原理,或者简单复制网上的代码示例,有导致代码存在安全风险. 我经常遇到 ...

  3. AES对称加密和解密

    package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...

  4. AES对称加密

    import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre ...

  5. java的AES对称加密和解密,有偏移量

    import java.math.BigDecimal; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; i ...

  6. AES对称加密和解密(转)

    AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...

  7. JAVA中AES对称加密和解密

    AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...

  8. AES对称加密解密类

    import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...

  9. app后端设计(4)-- 通讯的安全性

    在app的后台设计中,一个很重要的因素是考虑通讯的安全性. 因此,我们需要考虑的要点有: 1. 在app和后台,都不能保存任何用户密码的明文 2. 在app和后台通讯的过程中,怎么保证用户信息的安全性 ...

随机推荐

  1. UTL_DBWS - Consuming Web Services in Oracle 10g Onward

    from:http://oracle-base.com/articles/10g/utl_dbws-10g.php In a previous article I presented a method ...

  2. obj-c编程10:Foundation库中类的使用(1)[数字,字符串]

    我们知道在mac或iphone上编程最终逃不开os x平台,你无法在windows或linux上开发纯正的apple程序.(so不要舍不得银子买mac啦)虽说linux和windows上有移植的obj ...

  3. 如何编写 PL/SQL 程序

    本文的操作选用的数据库是oracle 数据库,登陆的用户是自带的scott用户,默认密码:tiger,有不懂得可以相互讨论一下,谢谢. 首先需要了解PL/SQL块的结构,PL/SQL块由定义部门.执行 ...

  4. jsp面试题

    1, JSP中有那些内置对象,以及作用? 共有9种基本内置组件: request 用户端请求,此请求会包含来自GET/POST请求的参数: response 网页传回用户端的回应: pageConte ...

  5. javap

    本词条缺少概述.信息栏.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码,是分析代码的一个好工具. j ...

  6. visio2010去除直线交叉处的歪曲

    Visio画图时,两根直线交叉时,总是默认会出现一个跨线的标志,在2007前的版本,可以通过以下方式解决: 选中线条,然后菜单的格式->行为->连接线->跨线->添加-> ...

  7. Mac下面解决PYTHONPATH配置的方法

    问题起因:MacPort安装的Python包在/opt目录里面,和系统安装的python包不在一起,由于Mac下面编译安装无止境的找不到问题,虽然MacPort解决了这个问题,但是它安装的东西,得自己 ...

  8. MAC OSX下用pip安装lxml时遇到xmlversion.h not found的解决办法

    http://blog.csdn.NET/wave_1102/article/details/37730589 今天在Mac下用pip安装lxml,总是报如下错误: etree_defs.h::: f ...

  9. Java虚拟机-内存tips

    java虚拟机内存可以分为独占区和共享区. 独占区:虚拟内存栈.本地方法栈.程序计数器. 共享区:方法区.Java堆(用来存放对象实例). 程序计数器 比较小的内存空间,当前线程所执行的字节码的行号指 ...

  10. 如何将代码提交到git上

    http://blog.csdn.net/laozitianxia/article/details/50682100 这个博客介绍的很详细.