2012-07-16 63 views

回答

12

只需选中RSA PKCS#1 v2.1 standard, chapter 7.2

RSAES-PKCS1-v1_5中加密((N,E),M)

输入:

  • (N,E)接收者的RSA公钥(k表示模数n的八位字节长度 )
  • M要加密的消息,长度为mLen的八位组串, 其中MLEN < = K - 11

所以输入取决于密钥的大小。 k是关键字大小,但是以八位字节为单位。因此,对于1024位密钥,1024/8 - 11 = 117个字节为最大纯文本。


请注意,以上是使用PKCS#1 v1.5填充的RSA的最大大小。对于较新的OAEP填充以下可以chapter 7.1找到:

RSAES-OAEP-ENCRYPT((N,E),M,L)

...

输入:

  • (N,E)接收者的RSA公钥(k表示在RSA模数n的八位位组 的长度)
  • 中号消息被加密,升的八位组串其中mLen < = k-2hLen-2
  • l与消息相关联的可选标签;所述 缺省值L,如果没有提供L,是空字符串

在哪里的hLen是用于掩码生成函数的哈希函数的输出的大小。如果使用默认的SHA-1散列函数,则消息的最大大小为k-42(因为SHA-1的输出大小为20字节,而2 * 20 + 2 = 42)。


通常,随机生成的密钥被加密而不是消息。然后用该秘密密钥加密该消息。这允许几乎无限长的消息,并且对称密码 - 比如CBC模式下的AES - 比非对称密码快得多。这种组合称为hybrid encryption


输出大小为RSA加密或签名生成用的任何填充数据是相同的以字节为单位模量的大小(四舍五入向上,当然),所以对于一个1024位的密钥将是必要的1024/8 = 128个八比特组/字节。

请注意,计算大小的输出数组可能包含设置为零的前导字节;这应该被认为是正常的。

+0

这是一个相当古老的问题,但是因为我在研究问题的一部分时偶然发现了这个问题:我认为这个答案不能回答整个问题,它也会要求预期的*密文*的大小,不仅仅是对输入大小的限制。即给定2048位的RSA密钥,给定特定的明文消息时产生的*密文*有多大?你的回答没有解决这个问题(或者我错过了)。 – malexmave 2017-10-31 18:31:38

+1

@malexmave在答案中增加了另一节。忘了它,因为它是显而易见的。 **警告** 1024位密钥大小只是一个例子,强烈建议使用2048位密钥或更高的密钥。 – 2017-10-31 18:42:01