在服务器与终端设备进行HTTP通讯时,常常会被网络抓包、反编译(Android APK反编译工具)等技术得到HTTP通讯接口地址和参数。为了确保信息的安全,我们采用AES+RSA组合的方式进行接口参数加密和解密。

1.关于RSA加密机制:公钥用于对数据进行加密,私钥对数据进行解密,两者不可逆。公钥和私钥是同时生成的,一一对应。比如:A拥有公钥,B拥有公钥和私钥。A将数据通过公钥进行加密后,发送密文给B,B可以通过私钥和公钥进行解密。

2.AES加密也叫对称加密:A用密码对数据进行AES加密后,B用同样的密码对密文进行AES解密。


具体操作方法:

1.在终端中采用openssl方式输入密钥的相关属性(公司名、邮箱等),然后在终端当前所在的地址下,生成公钥和私钥共7个文件(7个文件如何使用请看附录的拓展了链接)。

2.此时假设Android客户端拥有公钥PublicKey,服务器端拥有公钥PublicKey和私钥PrivateKey。

3.安卓发送请求到服务器端:安卓随机生成Byte[]随机密码,假设RandomKey=“123456”,通过AES算法,对Json数据利用进行加密。

4.但是此刻服务器并不知道客户端的RandomKey是什么,因此需要同时将Randomkey传给服务器,否则服务器无法通过AES对Json数据进行解密。但是如果直接发送请求,Randomkey就会暴露,所以要对RandomKey进行不可逆的RSA加密。

5.安卓将使用Randomkey进行AES加密的Json数据,和使用PublicKey进行RSA加密的RandomKey通过HTTP传送到服务器端。数据请求工作完成。

6.服务器端接收到AES加密的Json数据和Rsa加密的RandomKey数据。

7.服务器通过私钥PrivateKey对加密后的RandomKey进行Rsa解密。得到安卓生成的原始Randomkey。

8.利用原始的RandomKey对加密后的Json数据进行AES对称解密。至此已经得到安卓端发过来的原始Json数据。进行常规的服务器业务操作,然后将返回数据通过安卓端的RandomKey进行AES加密gouhou后,Response返回。

9.安卓端接收到Response的数据后,利用之前本地生成的RandomKey直接进行AES解密即可。

详细的流程图可以查看下图。


客户端-服务器端HTTPS数据传输流程图

注意事项:

1.在实际的开发过程中,发现RSA和AES有不同的密文生成标准,会不兼容IOS。IOS在RSA算法中需要的公钥与JAVA不同。详细的解决方案请查看:http://www.cnblogs.com/makemelike/articles/3802518.html

2.AES加密不可以使用超过128Byte的KEY,因为在jdk1.7以上的版本不支持超过128Byte的KEY。

小结:从性能上来测,整个客户端送加密数据开始到解密得到回传的原始数据不超过300ms(Iphone4和Centos Java服务器传输测试)。本方案没有采用TOKEN的方式,或许以后用到。公钥如何更新也需要继续完善。

附:具体的JAVA和IOS加密解密Demo迟点整理给出。

作者:东东酱酱
链接:http://www.jianshu.com/p/ec7bb7325ff2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

安全篇-AES/RSA加密机制相关推荐

  1. Android采用AES+RSA的加密机制对http请求进行加密

    前言 最近维护公司APP应用的登录模块,由于测试人员用Fiddler抓包工具抓取到了公司关于登录时候的明文登录信息.虽然使用的是HTTPS的方式进行http请求的,但还是被Fiddler抓到了明文内容 ...

  2. Android网络请求加密机制详解

    Android开发中,难免会遇到需要加解密一些数据内容存到本地文件.或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密就绝对安全了,如果加密函数使用不正确,加密数据很容易受到逆向破解攻击.还 ...

  3. JS逆向--PyExecJS基本用法--网易云音乐逆向思路,node.js安装教程,逆向思路,逆向分析,加密机制,RSA,AES加密算法,加密算法啊破解,js引擎,定位数据包,分析栈结构,无痕窗口

    文章目录 前言 一.JS逆向以及PyExecJS模块介绍 1.JS逆向 2.PyEecJS 二.使用步骤 1.环境安装 安装PyExecJS模块 安装node.js开发环境(官网链接 https:// ...

  4. RSA+AES混合加密实例

    文章目录 前言 一.AES+RSA混合加密是什么? 二.使用步骤 1.引入库 2.RAS+AES加密工具类 总结 Learning Process: 希望可以给你带来帮助!!! 前言 在服务器与终端设 ...

  5. python常见加密方法实现,DES,AES,RSA,MD5,国密。--更新中

    常见加密算法的简介和python的实现,使用各种库实现,而不是源码实现 对称加密 DES加密 非对称加密 RSA加密 消息摘要算法/签名算法 MD5 国密算法 SM1 对称密码 SM4 对称算法 SM ...

  6. 密码学 aes rsa 分段加密 填充 rsakey 生成

    文章目录 1 可逆加密/解密 1.1 BASE64 2 不可逆加密 2.1 MD5 2.2 SHA256 2.3 SHA512 2.4 MAC加密 3 对称加密解密 3.1 des加密和解密 3.2 ...

  7. Python代码实现MD5、AES对称加密和RSA非对称加密以及OpenSSl实践

    1.MD5加密算法 1.1 MD5加密的特点 不可逆运算 对不同的数据加密的结果是定长的32位和16位字符(不管文件多大都一样) 对相同的数据加密,得到的结果是一样的(也就是复制). 抗修改性 :信息 ...

  8. 前后端通信安全RSA+AES混合加密

    前言 前后端安全通信一直是头疼的问题,如何保证前后端安全通信? 读完这篇文章教你学会前后端安全通信. 什么是前后端通信? 客户端向服务端获取资源(如:html/css/js/jpg/json/api接 ...

  9. 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密

    学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密 技术标签: RSA  AES  RSA AES  混合加密  整合 前言:    为了提高安全性采用了RSA,但 ...

  10. RSA(非对称)+AES(对称加密)前后台交互

    前言:    为了提高安全性采用了RSA,但是为了解决RSA加解密性能问题,所以采用了RSA(非对称)+AES(对称加密)方式,如果只考虑其中一种的,可以去看我前面两篇文章,专门单独写的demo,可以 ...

最新文章

  1. JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载
  2. STM32 TIMER初始化步骤
  3. php压制错误的代码,为什么要压制PHP错误?
  4. Day10 Python基础之特殊函数(八)
  5. JEP 342:JVM和幽灵
  6. 新电脑怎么分盘_电脑如何分盘及删除与合并04
  7. ExcelToDataTable
  8. @程序员,你该如何做职业规划才能不被“废”?
  9. STM32——库函数版——RGB8x8全彩点阵程序
  10. pgAdmin添加外键约束
  11. java两级缓存框架J2cache
  12. TIFF文件结构详解
  13. CRC循环冗余校验码计算器(附C++ 和Qt实现的CRC-16/MODBUS代码)
  14. Altium 怎么设置鼠标滚轮放大缩小
  15. 顺序主子式的英文翻译(定义)
  16. Python基础-不要对实例属性和类属性使用相同的名字
  17. eNSP配置(直连/静态/动态路由,DHCP,单臂路由,ACL,NAT,链路聚合,负载均衡,WLAN,备份路由)
  18. 用WinDbg分析电脑蓝屏文件
  19. 企业官网建设需要多少钱
  20. 怎样把其他格式的音频文件转换成MP3格式的

热门文章

  1. 让您SEO学习时间缩短一半的高阶秘籍
  2. 新浪科技独家博客连载《网络营销SEO秘籍》
  3. jquery实现简单计算器功能(仿苹果计算器)
  4. VMware 下载与安装 链接分享 巨好用
  5. 通话效果好的降噪蓝牙耳机有哪些?音质好的降噪蓝牙耳机推荐
  6. 微信小程序教学系列(1)- 入门指南
  7. 微软全球副总裁沈向洋畅谈“探寻企业成功之路”
  8. 关于自己在CIT时间里本地文档的总结(1)
  9. VUE+OpenLayer动态显示船舶位置信息
  10. 2018年度学习总结