RSA使用公钥加密

时间:2011-05-01 04:10:56

标签: c# encryption cryptography rsa

大家好 我正在建立客户/服务器会议系统

我遇到了一个问题“无法将类型'字符串'隐式转换为'System.Security.Cryptography.RSAParameters'”

我会快速解释这个过程

  • 客户端连接到服务器
  • 服务器发回公钥
  • 客户端将使用服务器公钥加密用户名+他的公钥

我收到了服务器回复(公钥),但是当我尝试使用RSA进行加密时,出现上述错误

这是我的代码:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

// mess is Server response as string
RSAParameters publickey = mess;

rsa.ImportParameters(publickey);

byte[] encryptedData = rsa.Encrypt(StringToByte(uname.Text + "|||" + PUBKEY), true);

1 个答案:

答案 0 :(得分:3)

首先,ImportParameters()不接受字符串。期待RSAParameters类型的东西。并且它不能隐式地将字符串转换为RSAParameter对象,这就是显示错误的原因。

我相信你还没有从根本上理解RSA是如何运作的。还是技术性的? 阅读示例provided in here以便从技术上理解它。

您应该寻找的是如何从服务器正确导出公钥,并使用相同的公钥来加密客户端中的某些内容。

正如您所猜测的那样ExportParametersImportParameters看起来很有希望。但是我通过短信(在我的项目中)发送它时遇到了麻烦。所以我使用的是ExportCspBlobImportCspBlob。确保为ExportCspBlob指定false,以便不包含私钥信息。

要将其作为字符串发送,我必须做的是base64编码从ExportCspBlob返回的字节数组。要进行转换,请使用Convert类。您专门寻找的方法是ToBase64StringFromBase64String