【问题标题】:How can I convert my string public key to RSAParameters?如何将我的字符串公钥转换为 RSAParameters?
【发布时间】:2021-09-16 09:44:57
【问题描述】:

我有一个可以用来解密消息的公钥。在我的 csharp 服务器上,我收到一条用私钥加密的消息。服务器知道公钥并希望对其进行加密。问题是 RSACryptoServiceProvider 不接受字符串作为密钥,而只接受 RSAParameters 格式。如何将我的公钥(目前是一个字符串)转换为 RSAParameters 类型?

如果在不将我的密钥转换为 RSAParameters 的情况下有其他解密方式,请告诉我。

这是公钥:

LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1NSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUUM4TlpkLzhUYUxSMStyT0JYRjdGYzZ2RFA0blRUdTlQNmVjcDd2YzRhTk1pVUorRXM2b2YrRFNvY25wL0drazJVa0k5OHlmVTZwMHNTa3NEcWV1R0hwc1AwaS9oYnlRYlM5RVBreW5HT1VicVpnRSt1SVN0SHVyd2ozaFJKQ1ZkbktKWkxVRVYvSDZCM3Z0SGZITG5GemIrd0E4VkhPeWlEWjVZenp3RHRoR1FJREFRQUItLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=

【问题讨论】:

  • 用私钥加密,用公钥解密???应该反过来。还是您在谈论签名/验证?
  • 用于校验,key目前是字符串格式,不是字节数组
  • 当前是字符串的公钥 不是正确的描述。键可以是不同的格式,也可以是字符串。您需要更详细地描述这一点,或者发布测试密钥。同时发布您的 C# 代码和 .NET 版本。
  • 我添加了问题的关键
  • 如果您对发布的公钥进行 Base64 解码,您将获得 PEM 编码的 X.509/SPKI 密钥。此格式的导入取决于您的 .NET 版本。从 .NET Core 3.0 开始,可以直接导入这种格式的 DER 编码密钥。在此之下或在 .NET Framework 中,BouncyCastle 是最简单的方法。

标签: c# string encryption key rsa


【解决方案1】:

您的密钥是 Base64 编码的。我可以猜到,因为它只使用 A-Z、a-z 和 0-9,并以 = 结尾。您可以通过解码取回字节:

byte[] keyBytes = Convert.FromBase64String(keyString)

如果您使用

将这些字节转换回 ASCII 字符串
var s = System.Text.Encoding.ASCII.GetString(keyBytes);

你会发现它给了你

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8NZd/8
TaLR1+rOBXF7Fc6vDP4nTTu9P6ecp7vc4aNMiUJ+Es6of
+DSocnp/Gkk2UkI98yfU6p0sSksDqeuGHpsP0i/hbyQbS
9EPkynGOUbqZgE+uIStHurwj3hRJCVdnKJZLUEV/H6B3v
tHfHLnFzb+wA8VHOyiDZ5YzzwDthGQIDAQAB
-----END PUBLIC KEY-----

【讨论】:

  • 如果你检查他的字节,你会发现它们的格式不正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2022-01-20
  • 2021-06-07
  • 2019-09-22
相关资源
最近更新 更多