【发布时间】:2012-01-20 11:16:58
【问题描述】:
我很好奇,因为 RSA 不是分组密码,但 Encrypt() 方法可以对任意数量的数据进行加密。
它是否使用 AES+RSA 混合加密?还是它只是简单地(错误地)使用 RSA 作为分组密码?
【问题讨论】:
-
它在哪里说加密方法可以获取任意数量的数据?当然不在文档中。
标签: c# encryption cryptography rsa
我很好奇,因为 RSA 不是分组密码,但 Encrypt() 方法可以对任意数量的数据进行加密。
它是否使用 AES+RSA 混合加密?还是它只是简单地(错误地)使用 RSA 作为分组密码?
【问题讨论】:
标签: c# encryption cryptography rsa
然而 Encrypt() 方法可以对任意数量的数据进行加密
根据MSDN不能
rgb 参数的最大长度
模数大小 -2 -2*hLen,其中 hLen 是哈希的大小。
它甚至有一个CryptographicException,上面写着“rgb 参数的长度大于最大允许长度。”。
【讨论】:
它是否使用 AES+RSA 混合加密?
不它没有。如果这是您正在寻找的内容,那么您必须自己完成或查看我关于该主题的旧 blog 条目。
或者它只是简单地使用 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);
}
【讨论】: