使用 .NET Core 获取 RSA 私钥
Getting RSA private key with .NET Core
在 .NET Core (3.1) 上,在 Windows 和 Linux 平台上,我想使用 X509Certificate2 实例的私钥解密消息。证书分别从 Windows 平台上的证书存储和 Linux 平台上的 PFX 文件中检索。
我想用类似的东西解密邮件:
static byte[] Decrypt(byte[] data, RSAParameters privateKey)
{
using (var rsa = RSA.Create())
{
rsa.ImportParameters(privateKey);
return rsa.Decrypt(data, RSAEncryptionPadding.OaepSHA256);
}
}
但是当我尝试提取私钥时,出现异常:"System.Security.Cryptography.CryptographicException: The requested operation is not supported."
var privateKey = x509cert.GetRSAPrivateKey();
var privateKeyParams = privateKey.ExportParameters(true); // <-- throws CryptographicException
我错过了什么?
更改您自己的 Decrypt
方法的签名以在第二个参数中接受 RSA
class 的实例。您正在做一些额外的工作,将私钥导出为明文形式,然后将其导入另一个对象以进行解密。
var privateKey = x509cert.GetRSAPrivateKey();
此行已经 returns RSA
class 的实例。也就是说,您所有的代码都简化为:
using (var rsa = x509cert.GetRSAPrivateKey())
{
return rsa.Decrypt(data, RSAEncryptionPadding.OaepSHA256);
}
抛出异常是因为您的私钥不可导出。而且你真的不需要有可导出的密钥。
在 .NET Core (3.1) 上,在 Windows 和 Linux 平台上,我想使用 X509Certificate2 实例的私钥解密消息。证书分别从 Windows 平台上的证书存储和 Linux 平台上的 PFX 文件中检索。
我想用类似的东西解密邮件:
static byte[] Decrypt(byte[] data, RSAParameters privateKey)
{
using (var rsa = RSA.Create())
{
rsa.ImportParameters(privateKey);
return rsa.Decrypt(data, RSAEncryptionPadding.OaepSHA256);
}
}
但是当我尝试提取私钥时,出现异常:"System.Security.Cryptography.CryptographicException: The requested operation is not supported."
var privateKey = x509cert.GetRSAPrivateKey();
var privateKeyParams = privateKey.ExportParameters(true); // <-- throws CryptographicException
我错过了什么?
更改您自己的 Decrypt
方法的签名以在第二个参数中接受 RSA
class 的实例。您正在做一些额外的工作,将私钥导出为明文形式,然后将其导入另一个对象以进行解密。
var privateKey = x509cert.GetRSAPrivateKey();
此行已经 returns RSA
class 的实例。也就是说,您所有的代码都简化为:
using (var rsa = x509cert.GetRSAPrivateKey())
{
return rsa.Decrypt(data, RSAEncryptionPadding.OaepSHA256);
}
抛出异常是因为您的私钥不可导出。而且你真的不需要有可导出的密钥。