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

标签 .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, RSAEncryptionPadding.Pkcs1);
}

最佳答案

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

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

  • AsymmetricAlgorithm.ImportSubjectPublicKeyInfo
  • AsymmetricAlgorithm.ImportPkcs8PrivateKey
  • AsymmetricAlgorithm.ImportEncryptedPkcs8PrivateKey
  • RSA.ImportRSAPublicKey
  • RSA.ImportRSAPrivateKey
  • ECDsa.ImportECPrivateKey
  • 等等

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

  • AsymmetricAlgorithm.ImportFromPem
  • AsymmetricAlgorithm.ImportFromEncryptedPem

无论是 .NET Framework 还是旧版本的 .NET Core(在最初回答时都存在,现在都不再支持)都没有内置的方式来加载裸 key 文件。

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

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

值得注意的是,这已被确定为 .NET 中的一个差距,目前已标记为 .NET Core 2.1(尽管它总是有可能无法实现):https://github.com/dotnet/corefx/issues/20414 . (编辑:它不是为 2.1 制作的,而是为 3.0 制作的)

关于.net-core - 如何将公钥导入RSA以在.net core中加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45384379/

相关文章:

python - 在 Python 中读取证书

encryption - 在 C# 中加密大字符串 - 最佳实践

security - 如何在不使用 key 服务器的情况下从 OpenPGP 智能卡获取公钥?

java - 如何在 Java 中生成 Diffie Hellman key 并检索原始 key 字节

.net - 如何使用 .NET Core 支持 ECC 中的安全曲线(例如 Curve25519)

c# - 在运行时从调试可视化工具中检测源语言

java - 为什么签名总是给我假的?

c++ - 如何在没有 Openssl 或其他库的情况下加载 RSA key 对

c# - Dotnet 应用程序作为守护进程启动,无法正常工作

c# - .Net Core 3.1 将 Serilog 与 Microsoft.Extensions.Logger 结合使用