我正在使用this link上给出的RSA加密代码,使用128字节公钥加密以下字符串:
[7998725336653383203658644639673805448553730986337128386926545744008381384348409264866333582258561179132241508936069720871865895053632019929236743348039021, 1993938860438750843589842757968313427718259534664174282914852335272086243792497573680387148722647412680490224484736059954284097163105446004304579443902885]
由于字符串太长,RSA_public_encrypt
函数返回-1
和null
字符串。我知道RSA应该用于小型文本,有没有相同的方法?
我使用ERR_error_string()
检查错误代码,它返回了以下错误代码字符串:error:0406D06E:lib(4):func(109):reason(110)
。
既然这个问题已被标记为可能重复,那么请让我解释一下,我只需要使用RSA,因为AES-RSA组合将完成我正在编写的chrome扩展的整个系统设计,比现在更复杂。我希望尽可能简化它。
答案 0 :(得分:1)
构建某种RSA分块方案将会比解密对称密钥并使用该密钥执行简单的AES解密要复杂得多且可能不安全,恕我直言。
就效率而言,RSA将是比AES更慢的更多的订单,因此您所做的权衡是放弃简单性(即您放弃使用AES的简单性) ,赞成一些RSA" chunking")以换取性能不佳(你得到的RSA性能较慢。)
我会采用混合AES-RSA方法的成熟路径,而不是尝试一些仅限RSA的方案。
答案 1 :(得分:1)
上面的答案已经提到了RSA-AES。这是正确的方法。您使用RSA交换一条小消息 - 对称密钥 - 您可以使用该会话密钥进行所有想要的交谈。
RSA的限制是数学上的限制,你知道。我看到有人抱怨MS不允许他们的RSA为他们的目的加密足够大的消息。问题是,一旦消息的数字大约是密钥的1/2,它会在数学函数中“翻转”过零,超过数字字段的上限 - 并且不会解密到数字字段的上限。它的起始数字相同。因此,除了在有限的意义上使用更大的RSA密钥之外,无法克服此限制。或者通过分组消息并单独作为RSA发送,但不鼓励使用相同的公钥/私钥对进行多次加密。
我真的建议你选择RSA / AES混合动力车。与我能想到的任何其他方式相比,你将获得更好的表现。
答案 2 :(得分:0)
如果必须严格使用RSA,则需要将消息拆分为等于RSA密钥大小的块,并多次应用RSA。但请注意,这样做意味着每个加密的块都有自己的填充,并且RSA在计算上比AES贵得多。
如果您正在加密的邮件足够大,则不仅需要更多时间来处理,而且RSA加密邮件可能比RSA加密AES密钥加上AES加密邮件更大。