大家好 我正在建立客户/服务器会议系统
我遇到了一个问题“无法将类型'字符串'隐式转换为'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);
答案 0 :(得分:3)
首先,ImportParameters()不接受字符串。期待RSAParameters
类型的东西。并且它不能隐式地将字符串转换为RSAParameter对象,这就是显示错误的原因。
我相信你还没有从根本上理解RSA是如何运作的。还是技术性的? 阅读示例provided in here以便从技术上理解它。
您应该寻找的是如何从服务器正确导出公钥,并使用相同的公钥来加密客户端中的某些内容。
正如您所猜测的那样ExportParameters和ImportParameters看起来很有希望。但是我通过短信(在我的项目中)发送它时遇到了麻烦。所以我使用的是ExportCspBlob和ImportCspBlob。确保为ExportCspBlob指定false
,以便不包含私钥信息。
要将其作为字符串发送,我必须做的是base64编码从ExportCspBlob返回的字节数组。要进行转换,请使用Convert类。您专门寻找的方法是ToBase64String和FromBase64String