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

发布于 2024-11-16 19:23:43 字数 105 浏览 1 评论 0原文

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

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

I am curious since RSA is not a block cipher, yet the Encrypt() method can take an arbitrary amount of data to encrypt.

Does it use AES+RSA hybrid encryption? Or does it simply use RSA (incorrectly) as a block cipher?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

戈亓 2024-11-23 19:23:43

但是 Encrypt() 方法可以加密任意数量的数据

然而 Encrypt() 方法可以根据 MSDN 不能

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

它甚至有一个CryptographicException,内容为“rgb 参数的长度大于允许的最大长度。”。

yet the Encrypt() method can take an arbitrary amount of data to encrypt

According to MSDN it can't

Maximum Length of rgb Parameter
Modulus size -2 -2*hLen, where hLen is the size of the hash.

It even has a CryptographicException that reads "The length of the rgb parameter is greater than the maximum allowed length.".

悲喜皆因你 2024-11-23 19:23:43

是否使用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);
}

Does it use AES+RSA hybrid encryption?

No it does not. If this is what you're looking for then you have to do it yourself or check my old blog entry on the subject.

Or does it simply use RSA (incorrectly) as a block cipher?

No it does not. It will apply a padding (either PKCS#1 1.5 or OAEP) to the supplied byte[] and encrypt it. As such is does have length limitations (as others already pointed out).

Here's how it looks like (from Mono's BCL source code).

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文