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

Yog*_*ana 2 rsa public-key-encryption .net-core 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, RSAEncryptionPadding.Pkcs1);
}
Run Code Online (Sandbox Code Playgroud)

bar*_*njs 6

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

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

  • 非对称算法.ImportSubjectPublicKeyInfo
  • 非对称算法.ImportPkcs8PrivateKey
  • 非对称算法.ImportEncryptedPkcs8PrivateKey
  • RSA.ImportRSAPublicKey
  • RSA.导入RSAPrivateKey
  • ECDsa.ImportECPrivateKey
  • ETC

.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)