【发布时间】:2018-01-27 19:44:39
【问题描述】:
在 C# 中,我从 HTTP 请求中检索 RSA 公钥,它为我提供了以 base64 编码的密钥。
WebClient webClient = new WebClient();
string rsaPublicKeyBase64 = webClient.DownloadString("http://localhost:8000/getkey");
// rsaPublicKeyBase64 = LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FEdDAwcXQ2Zi9UUXdMQmVsVExRdVlXb05xSQoxbmRkcFpaOGh0WWs4d0NLbmFuRFJpWkJ1NVo5NnBNT01yNi84RS9JUzB0amV4WGdsVjh0WFlKK0NKc1lDUHhoCnBDUkduUW9rYkE2MnpOODVXNEROVUNMQ0cyMXlXcndscFhjSmxLYkY2dFhxdmd3TGRQb2RwZzUwY3RrWkI4R0UKbDBLS3VOV3JHZXRad045V0NRSURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=
然后我解码 base 64 RSA 公钥。
byte[] rsaPublicKey = Convert.FromBase64String(rsaPublicKeyBase64);
/*
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt00qt6f/TQwLBelTLQuYWoNqI
1nddpZZ8htYk8wCKnanDRiZBu5Z96pMOMr6/8E/IS0tjexXglV8tXYJ+CJsYCPxh
pCRGnQokbA62zN85W4DNUCLCG21yWrwlpXcJlKbF6tXqvgwLdPodpg50ctkZB8GE
l0KKuNWrGetZwN9WCQIDAQAB
-----END PUBLIC KEY-----
*/
我的下一步是将包含我的 RSA 公钥证书的 byte[] 转换为类型 RSACryptoServiceProvider。我在网上找到了答案,但似乎没有一个适合我。
这是我目前拥有的(不起作用)。
string rsaPublicKeyFile = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
X509Certificate2 cert = null;
try {
File.WriteAllBytes(rsaPublicKeyFile, rsaPublicKey);
cert = new X509Certificate2(rsaPublicKeyFile);
} finally {
File.Delete(rsaPublicKeyFile);
}
我收到一个未处理的异常错误,如下面的屏幕截图所示。
System.Security.Cryptography.CryptographicException: 'Cannot find the requested object.
【问题讨论】:
-
您不需要创建 X509Certificate2 对象。而且您不能仅从公钥创建它。您需要将密钥直接加载到
PublicKey对象。 -
@Crypt32 你能举个例子吗
-
@Crypt32 没有这种情况的例子。链接包含示例:如何使用证书 *.crt 和 *.pfx 文件。但有关其他类型数据的问题。如果我错了,你能提供更准确的答案吗?
标签: c# encryption rsa x509certificate x509certificate2