1

我正在尝试在 C++ 中实现非常简单的 RSA 算法,但我没有使用 openSSL 函数。我有 3 个函数,generateParameterencryptiondecryption。每个功能的任务是:

  1. generateParameter函数将生成两个素数(p 和 q)、模数 (n)、公共指数 (e) 和私有指数 (d),然后将 n、e 和 d 写入文件。
  2. 加密函数将读取参数 n 和 e,加密消息,然后写入文件。
  3. 解密函数将读取参数 n 和 d,读取加密消息然后解密。

如果我在一台机器上运行它,所有这些功能都运行良好,但如果我想在两台不同的虚拟机上运行它怎么办?在VM1 上运行加密,发送加密消息(例如使用send() 函数),然后在VM2 上解密。

如果参数 n 和 d 没有发送到 VM2,VM2 如何解密消息?这两个参数是通过对素数(p 和 q)进行数学计算生成的,但我知道我不能发送素数。

这是我的问题,我很感激任何帮助。

问候,

杜利帕特

4

1 回答 1

2

您似乎并不完全了解公钥加密的工作原理。

双方都必须生成自己的公钥/私钥对。之后,您共享公钥(即 M1 将其公钥发送给 M2,反之亦然)。实际上,存在密钥分配和认证的问题,即我怎么知道一个说它属于约翰的公钥真的属于约翰?但是对于你的小例子,你可以先忽略它。

一旦两台机器都拥有合作伙伴的公钥,您就可以使用M2的公钥加密从 M1 到 M2 的消息。然后 M2 使用其私钥对其进行解密。将相同的想法应用于相反的方向。

这样,您永远不必共享任何主要因素或私钥(正如您正确注意到的那样,这样做会完全破坏过程的安全性)。

于 2013-09-09T09:27:46.203 回答