我正在尝试用C ++实现非常简单的RSA算法,而且我没有使用openSSL函数。我有3个功能, generateParameter ,加密和解密。每个职能的任务是:
如果我在一台机器上运行它,所有这些功能都可以正常工作,但如果我想在2台不同的虚拟机上运行它会怎样?在VM1上运行加密,发送加密的消息(例如,使用send()函数),然后在VM2上解密。
如果参数n和d未发送到VM2,VM2如何解密消息?这两个参数是通过对素数(p和q)进行数学计算生成的,但我知道我不能发送素数。
这是我的问题,我感谢任何帮助。
此致
dulipat
答案 0 :(得分:2)
您似乎并不完全了解公钥加密的工作原理。
两个合作伙伴都必须生成自己的公钥/私钥对。然后,您共享 public 键(即M1将其公钥发送到M2,反之亦然)。实际上,存在密钥分发和身份验证的问题,即如何知道说它属于John的公钥真的属于John?但是对于你的小例子,你可以先忽略它。
一旦两台机器都有合作伙伴的公钥,您就可以使用 M2 的公钥加密从M1到M2的消息。 M2然后使用其私钥解密它。反方向应用相同的想法。
这样,您就不必共享任何主要因素或私钥(正如您所注意到的那样,这样做会完全破坏流程的安全性。)