不同机器上的RSA加密和解密

时间:2013-09-09 09:00:04

标签: c++ rsa virtual-machine

我正在尝试用C ++实现非常简单的RSA算法,而且我没有使用openSSL函数。我有3个功能, generateParameter 加密解密。每个职能的任务是:

  1. generateParameter 函数将生成两个素数(p和q),模数(n),公共指数(e)和私有指数(d),然后写入n,e和d成文件。
  2. 加密函数将读取参数n和e,加密消息然后写入文件。
  3. 解密函数将读取参数n和d,读取加密的消息然后解密。
  4. 如果我在一台机器上运行它,所有这些功能都可以正常工作,但如果我想在2台不同的虚拟机上运行它会怎样?在VM1上运行加密,发送加密的消息(例如,使用send()函数),然后在VM2上解密。

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

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

    此致

    dulipat

1 个答案:

答案 0 :(得分:2)

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

两个合作伙伴都必须生成自己的公钥/私钥对。然后,您共享 public 键(即M1将其公钥发送到M2,反之亦然)。实际上,存在密钥分发和身份验证的问题,即如何知道说它属于John的公钥真的属于John?但是对于你的小例子,你可以先忽略它。

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

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