【问题标题】:OAEP RSA parameters with RSACryptoServiceProvider.Encrypt带有 RSACryptoServiceProvider.Encrypt 的 OAEP RSA 参数
【发布时间】: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 - 很好。就是我说的那个标签。谢谢

标签: c# encryption .net-core rsa oaep


【解决方案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 哈希的默认值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2016-06-03
  • 2016-10-14
  • 2017-05-24
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多