【发布时间】:2019-09-06 04:56:34
【问题描述】:
在 .Net 4.6 中创建 RSA 或 RSACryptoServiceProvider 对象默认为 KeyExchangeAlgorithm RSA-PKCS1-KeyEx,它仅支持 OaepSHA1 填充。
在尝试使用“OaepSHA256”等其他填充时,获取“指定的填充模式对此算法无效”。
有没有办法将 RSA 对象中的算法覆盖为支持此填充以使其支持所有填充的算法。
更新 RSACng 有效。在我的场景中,我使用容器密钥将私钥存储在机器中,使用 RSACryptoServiceProvider 在需要时使用容器密钥名称检索私钥。作为使用 RSACng 的一种解决方法,我正在导入从 RSACryptoServiceProvider 对象导出的属性,如下所示。有一个更好的方法吗?
using (var rsa = new RSACryptoServiceProvider(cspParams))
{
using(var rsaCng = new RSACng())
{
rsaCng.ImportParameters(rsa.ExportParameters(true));
decryptedResult = rsaCng.Decrypt(encryotedText, RSAEncryptionPadding.OaepSHA256)
}
}
【问题讨论】:
-
“在 .Net 6.0 中”- 没有 .NET 6.0。请说明您的目标平台。
-
KeyExchangeAlgorithm 属性没有实际意义,您应该忽略它。但是你需要使用 RSACng,而不是 RSACryptoServiceProvider。
-
抱歉.NET 4.6的错字
-
感谢 RSACng 的作品。在我的场景中,我使用容器密钥将私钥存储在机器中,使用 RSACryptoServiceProvider 在需要时使用容器密钥名称检索私钥。作为使用 RSACng 的一种解决方法,我正在导入从 RSACryptoServiceProvider 对象导出的属性,这听起来不错。有没有更好的办法?
-
感谢@Dai RSACng 工作。更新中提供的解决方法中的任何 cmets
标签: c# rsa sha256 rsacryptoserviceprovider