OAEP 与 SHA1 和 MGF1 与 BouncyCastle?

OAEP with SHA1 and MGF1 with BouncyCastle?

我正在尝试 RSA/ECB/OAEPWithSHA1AndMGF1Padding 在 .NET Framework 2.0 上使用 BouncyCastle 使用 c#。

我遇到了这个:

IAsymmetricBlockCipher engine = new OaepEncoding(new RsaEngine(), new Sha1Digest(), new Sha1Digest(), null);
using (var stream = new StreamReader(publicKey))
{
    var pemReader = new PemReader(stream);
    var pemObj = pemReader.ReadObject();
    var keyPair = (RsaKeyParameters)pemObj;
    engine.Init(true, keyPair);
}
var message = "test";
var data = Encoding.UTF8.GetBytes(message);
var encrypted = engine.ProcessBlock(data, 0, data.Length);

我的问题是,使用 BouncyCastle 和 c# 是否等同于 RSA/ECB/OAEPWithSHA1AndMGF1Padding 或者正确的方法是什么?

我对这里的参数也有疑问:

IAsymmetricBlockCipher engine = new OaepEncoding(new RsaEngine(), new Sha1Digest(), new Sha1Digest(), null);

我找不到将第二个 Sha1Digest 定义为 MGF1 之类的方法。

看看Peter Dettman's GIT

它在他的 unit test (line 302) 中使用名为 CipherUtilities 的通用 class 中的 IBufferedCipher 解决了这个问题,他是这样做的(第 302 行):

c = CipherUtilities.GetCipher("RSA/NONE/OAEPWithSHA1AndMGF1Padding");
c.Init(false, privKey);
outBytes = c.DoFinal(outBytes);
if (!AreEqual(outBytes, input))
{
    Fail("OAEP test failed on decrypt expected " + Hex.ToHexString(input) + " got " + Hex.ToHexString(outBytes));
}

注意 c 是一个 IBufferedCipher