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

问题描述:

我想在dotnet核心(1.1)中使用PEM公钥文件加密字符串,我的问题是:我该如何做?RSA加密从dotnet核心中的PEM公钥的字符串

我以为这只会是一个案例:

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字符在任何地方(如m建议错误原因为here)。

(我在MacOS塞拉利昂,如果有什么差别)

任何帮助将不胜感激!

+2

你似乎有一个公共密钥,而不是证书。我想你不应该使用'X509Certificate2'。 –

+0

@ArtjomB。谢谢!你把我送到了正确的道路上。 (当有人指出时,这是非常明显的!)。 – stush

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

解决方案来自this优秀的职位。

对于dotnet核心(它没有RSACryptoServiceProvider类)我做了一些小修改。您可以从GetRSAProviderFromPemFile返回RSAParameters对象,那么你可以使用像:

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