带有 RSACryptoServiceProvider.Encrypt 的 OAEP RSA 参数

Posted

技术标签:

【中文标题】带有 RSACryptoServiceProvider.Encrypt 的 OAEP RSA 参数【英文标题】:OAEP RSA parameters with RSACryptoServiceProvider.Encrypt 【发布时间】:2021-06-01 11:17:04 【问题描述】:

RSACryptoServiceProvider.Encrypt 有一个 f0AEP 参数,可以设置为“true 以使用 OAEP 填充执行直接 RSA 加密(仅在运行 Windows XP 或更高版本的计算机上可用)”。

问题是...使用 OAEP,您可以使用 Hash、MGF Hash 和标签等参数。您如何使用 RSACryptoServiceProvider 设置它们?当未设置时,它们的默认设置是什么?即使它们不能设置,它们仍然应该默认我假设的东西?

RSA.Decrypt(Byte[], RSAEncryptionPadding) 似乎更加通用,并且应该是首选方法,但我只是想更多地了解 RSACryptoServiceProvider,因为我继承了一些使用它的旧代码。

【问题讨论】:

OAEP 没有“盐长”参数。 @PresidentJamesK.Polk - 很好。就是我说的那个标签。谢谢 【参考方案1】:

RSACryptoServiceProvider 应用默认值(来自RFC8017),即摘要和空标签的 SHA1。 .NET 文档没有详细描述这一点。关于 SHA1 的提示可以在关于重载Encrypt(Byte[], RSAEncryptionPadding) 的注释中找到。最终,由于文档稀少,必须对其进行测试。

对于其他摘要,必须使用其他实现,例如RSACng。即使在这里,也只能以相同的方式选择两个摘要。无法设置标签(不过,通常也不设置)。

BouncyCastle 的 RSA/OAEP 的 C# 实现允许独立设置摘要。同样,可以设置标签(称为encodingParams)。 Here 是 C#/BouncyCastle 的示例。

【讨论】:

这是一个很好的观察关于 SHA1 是默认值!我想这也解释了为什么 OpenSSL 的 RSA_private_decrypt 使用 SHA1 作为哈希 / MGF1 哈希的默认值。

以上是关于带有 RSACryptoServiceProvider.Encrypt 的 OAEP RSA 参数的主要内容,如果未能解决你的问题,请参考以下文章

带有和不带有聚合的 sql 查询

如何翻转正面带有标签而背面带有另一个标签的视图 - 参见图片

CakePHP 如何处理带有/不带有 'id' 字段的 HABTM 表?

带有滚动的 Div 和带有绝对位置的内容

带有 RecyclerView 的 DialogFragment 比带有 Recyclerview 的 Fragment 慢

访问控制允许带有和不带有 www 的来源