我有 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/