RSA 从 dotnet 核心中的 PEM public 密钥加密字符串

RSA encrypt a string from PEM public key in dotnet core

我正在尝试使用 dotnet 核心 (1.1) 中的 PEM public 密钥文件加密字符串,我的问题是:我该怎么做?

我认为这只是以下情况:

var cert = new X509Certificate2("path_to_public_key.pem");
using (var rsa = cert.GetRSAPublicKey())
{
    // encrypt here
}

但是,当我尝试更新证书时出现以下错误:

error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error

PEM 文件如下所示:

-----BEGIN PUBLIC KEY-----
... ANBgkqhkiG9w0BAQEFA ...
(loads more text)
-----END PUBLIC KEY-----

我已经检查了 pem 文件,没有任何无关的 ^M 字符(来自错误的建议原因 here)。

(如果有什么不同的话,我使用的是 macOS Sierra)

如有任何帮助,我们将不胜感激!

Artjom B 的评论让我走上了正确的道路。 public 密钥确实不是证书。

解决方案来自this优秀post。

对于 dotnet 核心(没有 RSACryptoServiceProvider class),我做了一些小修改。您可以 return 来自 GetRSAProviderFromPemFileRSAParameters 对象,然后您可以像这样使用它:

using (var rsa = RSA.Create()
{
   rsa.ImportParameters(GetRSAProviderFromPemFile("path_to_pem.pem"));
   var encrypted = rsa.Encrypt( ... );
}