【问题标题】:RSA Encrypt with Public Key使用公钥进行 RSA 加密
【发布时间】:2011-08-16 07:48:25
【问题描述】:

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

我遇到了一个问题“无法将类型 'string' 隐式转换为 '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);

【问题讨论】:

    标签: c# encryption cryptography rsa


    【解决方案1】:

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

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

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

    正如您所料,ExportParametersImportParameters 看起来很有希望。但是,我无法通过 SMS 发送它(在我的项目中)。所以我使用的是ExportCspBlobImportCspBlob。确保为 ExportCspBlob 指定 false,以免包含私钥信息。

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

    【讨论】:

    • 亲爱的Ranhiru谢谢您的回复,我想问你的公钥格式的样子应该是如何正确低于我的公钥:E = 010001,N = 9060434af1e861fef7b918e31067fcacf62ebed29dcfb5deb251e3190d29bf32c63107b9f0301632c4f36a62387028c0d78dc4158a4f7299d0bd77daa66a1a036745d1bd7608b887b7330e2b8b630a7797e7e374635360905965e7a7000aaf6687f406cafc1f9d9309fdc23a04a139c1403335297e925badeb206c87735b326b SPAN>
    • 你是如何产生这个的?来自ExportCspBlob 方法?
    猜你喜欢
    • 2019-08-06
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2011-11-07
    • 2011-11-10
    • 2013-05-07
    相关资源
    最近更新 更多