在 C# 中用 RSA/ECB/OAEPWithSHA-1AndMGF1Padding 加密

Encrpyt with RSA/ECB/OAEPWithSHA-1AndMGF1Padding in C#

我需要在 C# .NET 4.7.2 中加密一些文本,我需要使用的密码是 RSA/ECB/OAEPWithSHA-1AndMGF1Padding。然而,内置的 C# class、RSACryptoServiceProvider 似乎没有 MGF1 填充。

如何使用 public 密钥和 RSA/ECB/OAEPWithSHA-1AndMGF1Padding 进行加密?

我目前拥有的代码:

var cert = new X509Certificate2('path to certificate');
var rsa = cert.PublicKey.Key as RSACryptoServiceProvider;
var dataToEncrypt = ASCIIEncoding.ASCII.GetBytes(data);
var encryptedByteArray = rsa.Encrypt(dataToEncrypt, true).ToArray();

return Convert.ToBase64String(encryptedByteArray);
RSA rsa = ...;
byte[] encrypted = rsa.Encrypt(data, RSAEncryptionPadding.OaepSha1);

MGF-1 是迄今为止 RFC 定义的唯一掩码生成函数,因此是隐含的。

另外,尽量避免直接使用RSACryptoServiceProvider。如果您使用的是旧版本且必须这样做,则将 true 传递给其 fOAEP 参数与从新重载请求 OaepSha1 相同。