【问题标题】:how to import public key into RSA for encrypt in .net core如何将公钥导入 RSA 以在 .net 核心中加密
【发布时间】:2018-01-05 03:59:01
【问题描述】:

我有 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 rsa public-key-encryption asp.net-core-webapi asp.net-core-1.1


    【解决方案1】:

    编辑: 2021-11-29 - 更新已过期两年的答案,包括 .NET Core 3.0 API

    .NET Core 3.0+ 可以通过特定于格式的方法加载 BER 编码的密钥文件格式(不是文本/PEM 格式):

    • AsymmetricAlgorithm.ImportSubjectPublicKeyInfo
    • 非对称算法.ImportPkcs8PrivateKey
    • AsymmetricAlgorithm.ImportEncryptedPkcs8PrivateKey
    • RSA.ImportRSAPublicKey
    • RSA.ImportRSAPrivateKey
    • ECDsa.ImportECPrivateKey

    .NET 5+ 还可以通过通用调度程序加载 PEM 格式密钥(因为 PEM 标签标识格式):

    • 非对称算法.ImportFromPem
    • 非对称算法.ImportFromEncryptedPem

    .NET Framework 和 .NET Core 的旧版本(在最初回答时就已经存在,现在都不再支持)都没有内置的方式来加载裸密钥文件。

    对于这些环境,您有几个选择:

    • 将公钥包装成证书并使用cert.GetRSAPublicKey()
    • 使用openssl rsa -in text/publicKey.key -text -noout复制每个字段的所有十六进制值,并将它们直接导入RSAParameters结构(然后调用(rsa.ImportParameters(rsaParams)
    • 学习ITU-T X.680(ASN.1)、ITU-T X.690(DER)、PKCS#1(RSA)和RFC 7486(如果要读取PEM编码的密钥)读取密钥文件,然后解析将其转换为RSAParameters 结构,并使用rsa.ImportParameters(rsaParams)

    值得注意的是,这已被确定为 .NET 中的一个缺口,并且当前标记为 .NET Core 2.1(尽管它总是可能无法实现):https://github.com/dotnet/corefx/issues/20414。 (编辑:它没有用于 2.1,它用于 3.0)

    【讨论】:

      【解决方案2】:

      试试ImportRSAPublicKey/ImportRSAPrivateKey

      您的代码应如下所示

          ...
          using( RSA rsa = RSA.Create())
          {        
            var publicKeyBytes = Convert.FromBase64String(yourPublicKey);
      
            rsa.ImportRSAPublicKey(publicKeyBytes,bytesRead:out int _);
      
            var encryptedResult = rsa.Encrypt(yourData, RsaEncryptionPadding.Pkcs1);
          }
          ...
      

      【讨论】:

        猜你喜欢
        • 2012-12-11
        • 1970-01-01
        • 2010-10-04
        • 2018-05-02
        • 2023-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多