Lim*_*nic 5 java client-server rsa
我无法准确理解 RSA 的工作原理。许多例子和定义试图解释但使用了模糊的上下文。
所以这就是我想做的:
我有一台使用 RSA 并具有私钥和公钥的服务器。据我了解,连接后,服务器以未加密的方式将公钥发送到服务器。如果您愿意的话,可以进行某种握手。
然后,进一步的流量将以加密的方式发生。为了建立这种方式,我如何能够加密客户端发送的内容,并解密客户端接收的内容(从客户端的角度来看)。
在服务器端,加密的数据由私钥解密,但如果没有该私钥,我无法解密客户端中的数据......我不能在客户端中拥有该私钥,因为它是秘密的。
这让我很困惑,我是否遗漏了一些明显的东西,或者是否需要第二个私钥?
提前致谢!
正如您已经指出的,RSA是一种非对称加密方案,这意味着:
c = E(pub_key, m) // ciphertext = encryption(public key, message)
m = D(pri_key, c) // message = decryption(private key, ciphertext)
Run Code Online (Sandbox Code Playgroud)
相比之下,对称加密方案(例如前面的AES)的工作原理如下:
c = E(key, m)
m = E(key, c)
Run Code Online (Sandbox Code Playgroud)
换句话说,相同的密钥用于加密和解密。
这就是非对称密码系统发挥作用的地方。它允许各方安全地交换对称加密的密钥。
基本上,原始(但非常脆弱!)密钥交换看起来是这样的:
pub_key_S
c = E(pub_key_S, pub_key_C)
c用他的私钥解密pub_key_C = D(pri_key_S, c)
key_CS
c = E(pub_key_C, key_CS)
c给客户端
pri_key_C key_CS = D(pri_key_C, c)
现在,客户端和服务器拥有一个共享密钥key_CS,它们可以使用该密钥来安全地进行正在进行的会话通信。
这样的协议实际上要复杂一些,包括证书、数字签名、哈希码等。最广泛使用的协议可能是SSL 或 TLS。(例如https)。
如果您对此类协议的详细信息感兴趣,我建议您查看该链接。
| 归档时间: |
|
| 查看次数: |
3203 次 |
| 最近记录: |