AES + RSA + Hash 实现 C-S 安全交互
概述
AES 由于其执行速度快,易于硬件实现,破解难度大等优势,被广泛用于数据的加密。
既然是对称加密,那如何保证秘钥的安全传输?很容易想到用 RSA 加密秘钥。由于只能用私钥解密,而私钥不需要交互双方都知道也就不用通过网络传输,只要私钥不泄露信息就是安全的。
但如果别人截取到请求后伪造数据也用 RSA 公钥加密这种情况呢?也就是如何保证数据的准确性?这个时候就需要签名校验。
本文基于 AES + RSA + Hash 实现一套完整的足够安全的加解密算法。
流程图

实现
Client 端
- 生成 AES 密钥。
- 使用生成的 AES 密钥对请求的明文数据进行加密,得到 EncryptData。
- 使用 Server 端提供的接口获取RSA公钥。
- 使用获取到的 RSA 公钥对 AES 密钥进行加密,得到 EncryptAesKey。
- 生成签名(CRC 或 Hash 都可以,简单点可以只对 AES 秘钥按一定的规则转换后 Hash)。
- 将 EncryptAesKey EncryptData 和 Hash 一起发送给 Server 端。
Server 端
- 生成 RSA 密钥对,并提供接口给 client 获取 RSA 公钥(或者直接私下明文约定好)。
- 响应 Client 的 Http 请求,获取到 EncryptAesKey EncryptData 和 Hash。
- 使用 RSA 私钥 EncryptAesKey 进行 RSA 解密,得到 AES 密钥 AesKey。
- 按照约定的规则对 AesKey 进行转换后再生成签名,校验获取到的 Hash 字段,如不通过就不用继续后边的处理了。
- 使用最终的 AesKey 对 EncryptData 进行 AES 解密,得到明文数据。
- 做响应的处理,返回结果。
注:返回结果的加解密逆推回去即可。
一些扩展
- 签名前最好对参与签名的字段先 Base64 编码一下,避免一些特殊字符导致签名校验不通过,返回结果最好也编码下。
- 请求和返回数据最好增加时间戳或 UUID 字段,这样生成的签名基本不会出现重复的情况,而且每次都有变动。
AES + RSA + Hash 实现 C-S 安全交互的更多相关文章
- 加解密 3DES AES RSA 简介 示例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 我的Android进阶之旅------>Android采用AES+RSA的加密机制对http请求进行加密
前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密 ...
- 开放接口的安全验证方案(AES+RSA)
http://wubaoguo.com/2015/08/21/%E5%BC%80%E6%94%BE%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%AE%89%E5%85%A8%E9%AA ...
- 安全篇-AES/RSA加密机制
在服务器与终端设备进行HTTP通讯时,常常会被网络抓包.反编译(Android APK反编译工具)等技术得到HTTP通讯接口地址和参数.为了确保信息的安全,我们采用AES+RSA组合的方式进行接口参数 ...
- 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key
一)概述 什么是互联网支付? 当支付遇到互联网,一场革命自然不可避免.成为现实的是传统的现金支付已经“退居二线”,各种在线支付方式成为人们日常消费的主要支付方式.银行推出的网银以及第三方支付公司推出的 ...
- APP安全--网络传输安全 AES/RSA/ECC/MD5/SHA
移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...
- 加密算法比较3DES AES RSA ECC MD5 SHA1等
加 密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了.非对称算法与之不同,发送双方A,B事先均 ...
- 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用(转载)
加密技术通常分为两大类:"对称式"和"非对称式". 对称性加密算法:对称式加密就是加密和解密使用同一个密钥.信息接收双方都需事先知道密匙和加解密算法且其密匙是相 ...
- 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用
加密技术通常分为两大类:"对称式"和"非对称式". 对称性加密算法:对称式加密就是加密和解密使用同一个密钥.信息接收双方都需事先知道密匙和加解密算法且其密匙是相 ...
随机推荐
- HDU 5299 Circles Game 博弈论 暴力
Circles Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5299 Description There are n circles on ...
- Codeforces Round #341 (Div. 2) D. Rat Kwesh and Cheese 数学
D. Rat Kwesh and Cheese 题目连接: http://www.codeforces.com/contest/621/problem/D Description Wet Shark ...
- Cloud Foundry中vmc tunnel与caldecott原理
在Cloud Foundry中,用户可以vmc create-service创建一个service instance,但是常规情况下,用户不能手动地进一步对service instance进行设计.以 ...
- 【maven】maven项目移除Maven Dependencies后如何再添加进去
比较着急这几天弄一个项目,所以匆忙间把maven项目的Maven Dependencies给remove掉了 如下图: 这下可好,整个项目报错了 解决方法: 对比了有Maven Dependencie ...
- Netty游戏服务器二
上节我们写个server主类,那么发现什么事情都干不了,是的,我们还没有做任何的业务处理. 接着我们开始写处理客户端连接,发送接收数据的类ServerHandler. public class Ser ...
- Android双系统实现
1. 前言: 刷机,似乎是安卓手机用户的一项专利,可是,会刷机的用户一般都是喜新厌旧的角色. 一个系统用久了.就想换到还有一个系统.或者认为没有原来的好,或者又认为要换回去.这样又要重刷. 可是刷来刷 ...
- ylbtech-LanguageSamples-Hello World
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Hello World 1.A,示例(Sample) 返回顶部 “Hello World ...
- [转]ssis cannot retrieve the column code page info from the ole db provider
本文转自:http://social.msdn.microsoft.com/Forums/sqlserver/en-US/dc1a61f2-1ab8-4ed3-b85c-db6481800b50/er ...
- @RestController和@Controller的差异
SpringMVC现在使用越来越普及,在使用注解写控制器中发现,需要控制器页面跳转时,需要对类注解为@Controller,而此时,使用freemarker时,在类中写的restful接口会报cann ...
- [转载]Delphi事件的广播
https://blog.csdn.net/dropme/article/details/975736 明天就是五一节了,辛苦了好几个月,借此机会应该尽情放松一番.可是想到Blog好久没有写文章,似乎 ...