.net core 如何将公钥导入RSA以在.net core中进行加密

.net core 如何将公钥导入RSA以在.net core中进行加密,.net-core,rsa,public-key-encryption,asp.net-core-webapi,asp.net-core-1.1,.net Core,Rsa,Public Key Encryption,Asp.net Core Webapi,Asp.net Core 1.1,我有publicKey.key,我想把它导入rsa加密 这是我的代码: using (RSA rsa = RSA.Create()) { var key = Encoding.UTF8.GetBytes("012345678901234567890"); byte[] publicKey = File.ReadAllBytes("text/publicKey.key"); var result = rsa.Encrypt(key, RSAEncryptionPaddi

我有publicKey.key,我想把它导入rsa加密

这是我的代码:

using (RSA rsa = RSA.Create())
{
    var key = Encoding.UTF8.GetBytes("012345678901234567890");

    byte[] publicKey = File.ReadAllBytes("text/publicKey.key");

    var result = rsa.Encrypt(key, RSAEncryptionPadding.Pkcs1);
}
.NET Core(或Framework)没有加载裸密钥文件的内置方法

您有两个选择:

  • 将公钥包装到证书中并使用
    cert.GetRSAPublicKey()
  • 使用
    openssl rsa-in-text/publicKey.key-text-noout
    复制每个字段的所有十六进制值,并将它们直接导入到
    rsapameters
    结构中(然后调用
    rsa.ImportParameters(rsaparms)
  • 研究(ASN.1),(DER),(RSA)和(如果您想读取PEM编码的密钥)以读取密钥文件,然后将其解析为
    rsapertameters
    结构,并使用
    RSA.ImportParameters(rsaParams)
值得注意的是,这已被确定为.NET中的一个缺口,并且目前标记为.NET Core 2.1(尽管它总是可能不成功):。

试试/

您的代码应该如下所示

    ...
    using( RSA rsa = RSA.Create())
    {        
      var publicKeyBytes = Convert.FromBase64String(yourPublicKey);

      rsa.ImportRSAPublicKey(publicKeyBytes,bytesRead:out int _);

      var encryptedResult = rsa.Encrypt(yourData, RsaEncryptionPadding.Pkcs1);
    }
    ...