如何在 .NET Core 中使用 RSAPSS 算法创建 RSA 实例?

How can I create an RSA instance with RSAPSS algorithm in .NET Core?

var rsa = RSA.Create("RSAPSS");

我正在使用这段代码创建一个 RSA 实例。它在 .NET Framework 4.7.2 中工作,但在 .NET Core 和 .NET 5 中 returns null Windows OS.

RSA.Create("RSA") 适用于 .NET Framework 和核心。有没有办法让 RSAPSS 在 .NET Core 中工作或者它是否不受支持?

我检查了 this document,它说 windows 和 linux 支持 PSS 填充。 Windows 支持 RSACng,但 Linux 不支持。但是我很困惑,如果 Windows.

支持,为什么我会得到 null

您可以使用接受 RSASignaturePadding 参数的重载方法:

var rsa = RSA.Create(2048);
var sign = rsa.SignHash(new byte[32], HashAlgorithmName.SHA256, RSASignaturePadding.Pss);
bool ok = rsa.VerifyHash(new byte[32], sign, HashAlgorithmName.SHA256, RSASignaturePadding.Pss);

我的问题是相同的代码在 .NET Framework 中运行良好,但在 .NET Core 中却不行,我的项目是针对 .NET 标准的。

在我的用例中,我使用 RSA.Create("RSAPSS") 创建 RSA 实例,然后使用 ImportParameters 方法导入 RsaParameters。如果我不使用 RSAPSS 作为算法名称并创建默认的 RSA 实现,它会在使用 Pss 填充签名哈希时抛出错误,表示不支持填充模式。

我发现 RSA.Create 方法在 .NET Core 中有 an overload that takes RsaParameters。我已经测试了这个重载,发现它适用于 Pss 填充。所以我刚刚添加了一个运行时检查,如果它是 .NET Core,我使用这个重载,如果不是,我使用与以前相同的代码,它解决了我的问题。