带有 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 参数的主要内容,如果未能解决你的问题,请参考以下文章
如何翻转正面带有标签而背面带有另一个标签的视图 - 参见图片
CakePHP 如何处理带有/不带有 'id' 字段的 HABTM 表?
带有 RecyclerView 的 DialogFragment 比带有 Recyclerview 的 Fragment 慢