Ehs*_*hmi 11 encryption cryptography rsa polarssl
我有一些明确的文本,我想用RSA_PKCS_V21加密(使用PolarSSL库).问题是我需要在执行算法之前知道密文的大小(用于动态内存分配目的).我知道RSA密钥大小和明文长度.
我也想知道输入明文长度的限制.
任何的想法?
Maa*_*wes 13
RSAES-PKCS1-V1_5-ENCRYPT((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填充,可以在第7.1章中找到以下内容:
RSAES-OAEP-ENCRYPT((n,e),M,L)
...
输入:
- (n,e)接收者的RSA公钥(k表示RSA模数n的八位字节长度)
- 要加密的M消息,长度为mLen的八位字节串,其中mLen <= k - 2hLen - 2
- L与消息关联的可选标签; L的默认值,如果未提供L,则为空字符串
其中hLen是用于掩码生成函数的散列函数的输出大小.如果使用默认的SHA-1散列函数,则消息的最大大小为k-42(因为SHA-1的输出大小为20字节,2*20 + 2 = 42).
通常,加密随机生成的密钥而不是消息.然后使用该密钥加密消息.这允许几乎无限长的消息,并且对称加密 - 例如CBC模式中的AES - 比非对称加密快得多.这种组合称为混合加密.
RSA加密或带有任何填充的签名生成的输出大小与模数的大小(以字节为单位)相同(当然向上舍入),因此对于1024位密钥,您可能期望1024/8 = 128个八位字节/字节.
请注意,计算大小的输出数组可能包含设置为零的前导字节; 这应该算是正常的.