C#RSACryptoServiceProvider Encrypt()方法是如何工作的
本文关键字:工作 何工作 Encrypt 方法 C#RSACryptoServiceProvider | 更新日期: 2023-09-27 17:59:53
我很好奇,因为RSA不是块密码,但Encrypt()方法可以使用任意数量的数据进行加密。
它使用AES+RSA混合加密吗?或者它只是(错误地)使用RSA作为分组密码?
然而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);
}