2011-05-01 157 views
0

喜逢身体 我建立客户机/服务器系统的会议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); 

回答

3

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

我相信你并没有从根本上理解RSA的工作原理。还是技术? 阅读示例provided in here以在技术上理解它。

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

正如你所猜测的ExportParametersImportParameters看起来很有希望。不过,我无法通过短信发送(在我的项目中)。所以我用的是ExportCspBlobImportCspBlob。确保您指定false ExportCspBlob,以便不包含私钥信息。

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

+0

亲爱Ranhiru 谢谢您的回复 我要问你的公钥格式应该怎么样子 低于正确我的公钥:E = 010001, N = 9060434af1e861fef7b918e31067fcacf62ebed29dcfb5deb251e3190d29bf32c63107b9f0301632c4f36a62387028c0d78dc4158a4f7299d0bd77daa66a1a036745d1bd7608b887b7330e2b8b630a7797e7e374635360905965e7a7000aaf6687f406cafc1f9d9309fdc23a04a139c1403335297e925badeb206c87735b326b – 2011-05-03 10:14:54

+0

你是如何产生的?从'ExportCspBlob'方法? – 2011-05-03 10:26:04