概述

AES 由于其执行速度快,易于硬件实现,破解难度大等优势,被广泛用于数据的加密。

既然是对称加密,那如何保证秘钥的安全传输?很容易想到用 RSA 加密秘钥。由于只能用私钥解密,而私钥不需要交互双方都知道也就不用通过网络传输,只要私钥不泄露信息就是安全的。

但如果别人截取到请求后伪造数据也用 RSA 公钥加密这种情况呢?也就是如何保证数据的准确性?这个时候就需要签名校验。

本文基于 AES + RSA + Hash 实现一套完整的足够安全的加解密算法。

流程图

实现

Client 端

  1. 生成 AES 密钥。
  2. 使用生成的 AES 密钥对请求的明文数据进行加密,得到 EncryptData。
  3. 使用 Server 端提供的接口获取RSA公钥。
  4. 使用获取到的 RSA 公钥对 AES 密钥进行加密,得到 EncryptAesKey。
  5. 生成签名(CRC 或 Hash 都可以,简单点可以只对 AES 秘钥按一定的规则转换后 Hash)。
  6. 将 EncryptAesKey EncryptData 和 Hash 一起发送给 Server 端。

Server 端

  1. 生成 RSA 密钥对,并提供接口给 client 获取 RSA 公钥(或者直接私下明文约定好)。
  2. 响应 Client 的 Http 请求,获取到 EncryptAesKey EncryptData 和 Hash。
  3. 使用 RSA 私钥 EncryptAesKey 进行 RSA 解密,得到 AES 密钥 AesKey。
  4. 按照约定的规则对 AesKey 进行转换后再生成签名,校验获取到的 Hash 字段,如不通过就不用继续后边的处理了。
  5. 使用最终的 AesKey 对 EncryptData 进行 AES 解密,得到明文数据。
  6. 做响应的处理,返回结果。

注:返回结果的加解密逆推回去即可。

一些扩展

  1. 签名前最好对参与签名的字段先 Base64 编码一下,避免一些特殊字符导致签名校验不通过,返回结果最好也编码下。
  2. 请求和返回数据最好增加时间戳或 UUID 字段,这样生成的签名基本不会出现重复的情况,而且每次都有变动。

AES + RSA + Hash 实现 C-S 安全交互的更多相关文章

  1. 加解密 3DES AES RSA 简介 示例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. 我的Android进阶之旅------>Android采用AES+RSA的加密机制对http请求进行加密

    前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密 ...

  3. 开放接口的安全验证方案(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 ...

  4. 安全篇-AES/RSA加密机制

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

  5. 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key

    一)概述 什么是互联网支付? 当支付遇到互联网,一场革命自然不可避免.成为现实的是传统的现金支付已经“退居二线”,各种在线支付方式成为人们日常消费的主要支付方式.银行推出的网银以及第三方支付公司推出的 ...

  6. APP安全--网络传输安全 AES/RSA/ECC/MD5/SHA

    移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...

  7. 加密算法比较3DES AES RSA ECC MD5 SHA1等

    加 密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了.非对称算法与之不同,发送双方A,B事先均 ...

  8. 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用(转载)

    加密技术通常分为两大类:"对称式"和"非对称式". 对称性加密算法:对称式加密就是加密和解密使用同一个密钥.信息接收双方都需事先知道密匙和加解密算法且其密匙是相 ...

  9. 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用

    加密技术通常分为两大类:"对称式"和"非对称式". 对称性加密算法:对称式加密就是加密和解密使用同一个密钥.信息接收双方都需事先知道密匙和加解密算法且其密匙是相 ...

随机推荐

  1. 【最优比率生成树】poj2728 Desert King

    最优比率生成树教程见http://blog.csdn.net/sdj222555/article/details/7490797 个人觉得很明白易懂,但他写的代码略囧. 模板题,但是必须Prim,不能 ...

  2. 使用redis时出现java.util.ArrayList cannot be cast to java.lang.Long

    java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Long at redis.clients. ...

  3. Codeforces Gym 100269B Ballot Analyzing Device 模拟题

    Ballot Analyzing Device 题目连接: http://codeforces.com/gym/100269/attachments Description Election comm ...

  4. 椭圆曲线加密算法(ECC)原理和C++实现源码(摘录)

    /* 1.用户A选定一条适合加密的椭圆曲线Ep(a,b)(如:y2=x3+ax+b),并取椭圆曲线上一点,作为基点G. 2.用户A选择一个私有密钥k,并生成公开密钥K=kG. 3.用户A将Ep(a,b ...

  5. CSS3技巧:fit-content水平居中

    当我们让一个模块水平居中首先想到的肯定是margin:0 auto;有木有?那么今天给大家介绍一个fit-content属性,不知道有没有同学用过,如果用过那么你可以略过这篇文章,没用过的同学就继续了 ...

  6. Shared libraries with GCC on Linux

    转:http://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html By anduril462 Libraries are a ...

  7. 牛x的面试知识点

    已经凌晨2点多了,看来今天是失眠了,反正睡不着,写篇日记总结一下我的第一次社招面试经历吧.2015年12月1日办理了离职手续,离开了万通中心,也算是和我的第一个东家正式说了再见,其实还是很喜欢国贸的, ...

  8. 修改centos7/osx的MAC地址

    change MAC Address in CentOS 7: nano /etc/sysconfig/network-scripts/ifcfg-ens160 systemctl restart n ...

  9. Idea 创建spring mvc项目时,在add framework support中找不到spring选项

    每次创建spring项目最头疼就是spring的配置文件,尤其是配置头信息.通过IDEA工具可以很好辅助完整这些工作. 先说下这个选项的作用:其作用就是利用IDEA自身提供的功能帮你完成一些sprin ...

  10. 为TextView设置两种状态,程序中可以动态切换

    经常会需要用文字的两种状态来表示当前系统的某两种状态.比如:         这里的第一个TextView和后两个TextView就表示了两种状态.我们可以在程序的动态的切换状态(而不是直接修改颜色) ...