是否在使用RSAEncryptionPadding.OaepSHA256的System.Security.Cryptography.RSA.Encrypt方法中假设MGF1填充?

Rag*_*ghu 5 .net c# encryption cryptography rsa

我需要使用OaepSHA256和MGF1填充来使用RSA公钥加密普通字节.所以我想我可以编写以下代码(使用.net framework 4.7):

var encryptionCert = new X509Certificate2(certBytes);
using (var rsaPublicKey = encryptionCert.GetRSAPublicKey()) // Get an instance of RSA derived class
    {
        var encryptedKeyBytes = rsaPublicKey.Encrypt(plainBytes, RSAEncryptionPadding.OaepSHA256);  
}
Run Code Online (Sandbox Code Playgroud)

我不知道MGF1填充和最佳非对称加密填充(OAEP)是否相关.

这是我的问题:

  1. 在.net框架中,上面的代码是否自动考虑MGF1填充(除了提供的OAEP)?
  2. 如果没有,那么我有什么选择来实现我的目标(除了去弹性城堡图书馆)?

Evk*_*Evk 7

OAEP是填充方案,需要2个具有不同属性的哈希函数才能运行.一个散列函数应将任意大小的输入映射到固定大小的输出.这种类型的散列函数是众所周知的,SHA-256,MD5等都是这种类型.规范允许不同的功能用于OAEP填充,例如SHA-256,SHA-1等.

另一个散列函数应将任意大小的输入映射到任意大小的输出 这种散列函数称为"掩码生成函数"(MFG).相关RFC只定义了一个这样的函数MFG1:

这里给出一个掩码生成函数:MGF1,它基于散列函数.
...

本文档的未来版本可以定义其他掩码生成功能.

因为只有一个允许的掩码生成函数 - .NET api不允许您选择它(没有可供选择)并且只使用它(MGF1)和RSA OEAP填充.