有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java RSA,如何向后通信

所以,一般来说,我对加密非常陌生,但我的客户机-服务器应用程序需要它,我选择RSA来完成这项任务。对于包数据的加密,我使用客户机的公钥并将密文发送到服务器,现在服务器使用他的私钥对其进行解密并可以读取消息。我的实际问题是:如何在服务器端加密数据并将其发送回客户端?我听说过一个“秘密密钥”,它是以某种方式从客户端和服务器密钥创建的,但我没有真正了解这个过程。看到了吗here。这次我是创建另一对密钥并将私钥发送给客户端,还是有其他方法


共 (1) 个答案

  1. # 1 楼答案

    你必须理解对称加密和非对称加密之间的区别。对于RSA,有公钥和私钥。AES等对称分组密码只需要通信双方都需要的一个密钥

    所以最简单的回馈方式就是

    1. 生成一个随机AES密钥(仅随机16字节)
    2. 使用AES和新生成的密钥[CT1]加密客户端消息
    3. 使用服务器的公共RSA密钥[CT2]加密之前生成的AES密钥(到目前为止,它被称为Hybrid Encryption
    4. 将CT1和CT2发送到服务器
    5. 服务器用其私钥解密CT2以获得AES密钥
    6. 服务器用恢复的AES密钥解密CT1
    7. 为了发回消息,服务器现在可以使用AES和双方都知道的密钥对消息进行加密(不再需要RSA)[CT]
    8. 客户端接收CT并使用已知的AES密钥解密

    这当然只是最基本的设置。为了获得完美的前向保密性,需要使用Diffie-Hellman Key Exchange。AES加密最好使用经过身份验证的操作模式,如GCM

    如果你不想头痛,使用TLS