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

时间:2018-03-26 02:53:43

标签: c# .net 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);  
}

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

以下是我的问题:

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

1 个答案:

答案 0 :(得分:7)

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

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

  

这里给出了一个掩码生成函数:MGF1,它基于a   哈希函数。
  ...

     

本文档的未来版本可能会定义其他蒙版生成   功能

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