• RSA和AES混合使用的原理


    利用RSA来加密传输AES的密钥,用AES来加密数据,思路如下:

    1、客户端启动,发送请求到服务端,服务端用RSA算法生成一对公钥和私钥,我们简称为pubkey1,prikey1,将公钥pubkey1返回客户端。

    2、客户端拿到服务端返回的公钥pubkey1后,自己用RSA算法生成一对公钥和私钥,我们简称为pubkey2,prikey2,并将公钥pubkey2利用服务端传过来的公钥pubkey1加密,加密后,传输给服务端。

    3、此时服务端收到客户端传输的密文,用私钥prikey1进行解密,因为数据pubkey2是用服务端的公钥pubkey2加密的,那么,通过解密就可以得到客户端生成的公钥pubkey2

    4、然后服务端自己再生成 对称密钥key,我们取名为aeskey,也就是我们的AES,其实也就是相对于我们配置中的那个16未长度的加密key,生成了这个key以后,我们就用客户端的公钥pubkey2进行加密,返回给客户端。因为被pubkey2加密的数据,只能被客户端对应的prikey2解密,所以,客户端拿到密文后,用prikey2进行解密操作,解密完,得到对称加密AES的密钥key,最后密钥key进行数据传输加密,至此,整个流程结束。

     

    特点分析:

    1、单纯的使用非对称加密方式RSA的话,效率会很低,因为非对称加密解密方式虽然很保险,但是过程复杂,需要时间长。

    2、单纯使用对称加密方式AES的话,太死板,因为这种方式使用的密钥是一个固定的密钥,也就是不能改,一旦客户端或者服务端改的话,就必须通知另一方要改,并且改了后,还需要约定一相同的密钥。使用起来非常不灵活。并且,有一种极端的情况就是,一旦密钥被人获取,那么,我们是无法知道的,我们的所发的每一条数据都会被都对方获取。

    but,AES有个很大的优点,那就是加密解密效率很高,而我们传输正文数据时,正号需要这种加解密效率高的;所以这种方式适合用于传输量大的数据内容。

    3、基于以上两种特点,所以取其优,就是结合使用;用RSA方式传输AES的密钥,然后客户端和服务端拿到AES的密钥后,再进行传输正式的内容。这样既利用了RSA的灵活性,可以随时改动AES的密钥;又利用了AES的高效性,可以高效传输数据。

  • 相关阅读:
    Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息
    Android 常见adb命令
    禅道项目管理软件 为提交Bug页面添加“优先级”字段
    禅道项目管理软件 为提交Bug页面设置bug必填字段
    Monkey Android app稳定性测试工具之Monkey使用教程
    移动设备 小米2S不显示CD驱动器(H),便携设备,MTP,驱动USB Driver,MI2感叹号的解决方法
    Python Elasticsearch api
    Kafka 集群配置SASL+ACL
    kafka集群搭建
    Zookeeper集群搭建以及python操作zk
  • 原文地址:https://www.cnblogs.com/jianguo221/p/13030046.html
Copyright © 2020-2023  润新知