rsa和aes实现编程式动态加密思路

一、对比学习来认识两种加密方式

RSA(三位发明者名字)AES(Advanced Encryption Standard高级加密算法)
加密类别非对称加密对称加密
安全性抵抗到目前为止已知的绝大多数密码攻击对称密钥加密中最流行的算法之一
加密原则公钥加密,私钥解密;私钥加密,公钥解密同一个秘钥加密的只有同一个秘钥能解开
加密效率加密效率较慢但是安全级别很高加密效率较快安全级别相对较高
总体介绍(可以不读很无聊)之所以叫 RSA算法,是因为算法的三位发明者RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准,主要的算法原理就不多加介绍,如果对此感兴趣的话,建议去百度一下RSA算法。需要了解的是RSA算法属于非对称加密算法,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。简单的说是“公钥加密,私钥解密;私钥加密,公钥解密”。高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

二、动态加密实现方式

加密对象为http请求中要传输的数据,现在讲的是一个动态加密的流程;

1.第一步用AES对内容进行高效加密       首先要对数据进行加密,由于传输的内容数据量一般会比较大,加密时应当选择加密效率较高的AES(对称加密)对内容进行加密。然后通过http进行传输,首先在客户端随机生成一个AES key,然后用这个随机的key对内容进行高效率加密。加密完成之后把数据发送到服务端,这个时候你肯定发现问题了,我把内容发送到了服务端我没有那个随机的key我怎么解密呢,是的我们要想办法把这个AES KEY发送到服务端。那么我们直接明文发送这个key行不行呢?当然是不行的,被拦截之后别人可以直接拿这个key对内容进行解密,那我们之前的工作就等于功亏一篑了。那么我们看第二步骤。主角登场。

2.第二步用RSA 公钥对上一步的key进行加密传输       这里我们用RSA的公钥对上一步的AES key进行加密,由于AES key比较短,所以加密不会消耗太久,这点可以放心。把AES 的随机key加密之后我们就可以安心的在网络中进行传输了,这个随机的key的解密是需要RSA的私钥才能解密的(公钥加密,私钥解密;),但是这个私钥只有我们服务端才有,其他任何人都不可能有。所以这个私钥一定要好好保管不能泄露。下面看第三步

3.第三步用RSA私钥解密AES KEY并用解密后的AES KEY对传输的私密数据进行解密,拿到数据,完成一套安全的数据传输。
这里只讲到了从客户端发送给服务端的原理,那么服务端发送给客户端的时候如果数据也比较私密我们怎么处理呢。其实能看到这里我相信你已经有了自己的想法了,刚刚我们用到的那个aes key,这时候已经同时存在服务端和客户端了,这时候返回的数据只需要在服务端用AES加密发送给客户端,然后客户端用这个AES KEY直接进行解密即可。当然如果响应数据不是私密数据,你完全可以不用加密。