C#RSACryptoServiceProvider Encrypt()方法是如何工作的

本文关键字:工作 何工作 Encrypt 方法 C#RSACryptoServiceProvider | 更新日期: 2023-09-27 17:59:53

我很好奇,因为RSA不是块密码,但Encrypt()方法可以使用任意数量的数据进行加密。

它使用AES+RSA混合加密吗?或者它只是(错误地)使用RSA作为分组密码?

C#RSACryptoServiceProvider Encrypt()方法是如何工作的

然而Encrypt()方法可以使用任意数量的数据来加密

根据MSDN,它不能

rgb参数的最大长度
模数大小-2-2*hLen,其中hLen是哈希的大小。

它甚至有一个CryptographicException,上面写着"rgb参数的长度大于允许的最大长度。"。

它使用AES+RSA混合加密吗?

没有。如果这是你想要的,那么你必须自己做,或者查看我关于这个主题的旧博客。

或者它只是(错误地)使用RSA作为分组密码?

没有。它将对提供的byte[]应用填充(PKCS#1 1.5或OAEP)并对其进行加密。因此,是否有长度限制(正如其他人已经指出的)。

下面是它的样子(来自Mono的BCL源代码)。

public byte[] Encrypt (byte[] rgb, bool fOAEP) 
{
    // choose between OAEP or PKCS#1 v.1.5 padding
    AsymmetricKeyExchangeFormatter fmt = null;
    if (fOAEP)
        fmt = new RSAOAEPKeyExchangeFormatter (rsa);
    else
        fmt = new RSAPKCS1KeyExchangeFormatter (rsa);
    return fmt.CreateKeyExchange (rgb);
}