zoukankan      html  css  js  c++  java
  • 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的高效性,可以高效传输数据。

  • 相关阅读:
    数据分析的5层解读,报表仍是有效的落地实践!
    rex 传文件改变用户属主
    rex 通过--parameter1=dbcdefg传参
    rex 给shell 脚本传参
    rex run 传参
    rex ssh公钥认证
    eclipse maven工程中src/main/resources目录下创建的文件夹是包图标的解决方法
    数据分析的三层需求
    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value
    java.sql.SQLException: Can not issue data manipulation statements with executeQuery()
  • 原文地址:https://www.cnblogs.com/jianguo221/p/13030046.html
Copyright © 2011-2022 走看看