RSA密钥需要重新生成

时间:2018-11-26 15:20:58

标签: c# xml iis

在我遇到RSA密钥问题时需要协助。我在服务器上通过C#代码使用定义的密钥容器名称(例如“ CustKey”)生成RSA密钥。我得到的密钥XML字符串很好,我可以使用该密钥将应用程序连接到它。我有一个通过端点生成密钥的API。如果我重新部署API,则使用公钥的应用程序将停止对其进行解码。我必须再次运行相同的代码来创建密钥,并且每次重新生成密钥时,加密的字符串都完全相同,然后使用该应用的应用程序才能再次正常运行。当应用程序池回收但我关闭了回收,但发布却停止并启动IIS API站点时,似乎发生了这种情况。任何想法如何使密钥保持工作以及为什么我必须重新生成它,但是每次都使用相同的密钥加密值。

感谢您提供任何信息。

1 个答案:

答案 0 :(得分:0)

您的代码的一些示例将极大地帮助您了解正在发生的事情。我只能推测此时您正在尝试使用公开密钥而不是私有密钥来解码消息。

首先,您必须具有两个配对的密钥:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string publicKey = rsa.ToXmlString(false);
string privateKey = rsa.ToXmlString(true);

第二,您必须将公共密钥提供给所有想要向您发送秘密消息的人:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicKey);
string secretMessage = Convert.ToBase64String(rsa.Encrypt(Encoding.UTF8.GetBytes(openMessage), false));

最后,当您收到一条秘密消息时,您只能对其进行解码,因为只有您拥有与公共密钥配对的私钥:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(privateKey);
string revealedMessage = Encoding.UTF8.GetString(rsa.Decrypt(Convert.FromBase64String(secretMessage), false));