如何在C#中导入公钥?

时间:2013-03-26 20:22:17

标签: c# client-server rsa

我可以创建服务器和客户端的非对称密钥,然后导出它们并尝试交换它们。我的问题,我无法找到解决方案,是我想将服务器的公钥导入客户端程序。它以byte []形式出现,但我需要能够将其用作RSAParameters,以便能够加密数据以转发到服务器。如何将byte []转换为RSAParameters类型?

private void secureButton_Click(object sender, EventArgs e)
        {
            clientRSA = new RSACryptoServiceProvider();
            byte[] clientPublicKey = clientRSA.ExportCspBlob(false);

            stm.Write(clientPublicKey, 0, clientPublicKey.Length);
            stm.Read(serverPublicKey, 0, serverPublicKey.Length);
        }

我知道这不是一种“安全”的做法,因为它很容易受到MITM的影响,但是我正面临一个艰难的学校最后期限,这是一个砖墙,我需要在我继续前进任何进一步的。

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:4)

我会继续做下面的答案,然后:

我从未做过blob,但我通常使用RSACryptoServiceProvider.ToXMLString()导出到XML。然后我将XML放在我的应用程序的资源中,然后再使用RSACryptoServiceProvider.FromXMLString()加载关键参数。

您无需保护公钥。这是公开的

答案 1 :(得分:3)

要将byte []公钥转换为RSAParameters,您可以使用相同的类 RSACryptoServiceProvider ;

byte[] clientPublicKey = ...
var provider = new RSACryptoServiceProvider();
provider.ImportCspBlob(clientPublicKey);
var parameters = provider.ExportParameters(false);