我正在使用 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 扩展的整个系统设计变得更加复杂比现在更加复杂。我希望尽可能简化。
最佳答案
上面的答案已经提到了 RSA-AES。这是正确的做法。您使用 RSA 来交换一条小消息(对称 key ),然后您可以使用该 session key 来进行任何您想要的对话。
正如您所知,RSA 的限制是数学上的限制。我曾经看到有人提示 MS 不允许他们的 RSA 为他们的目的加密足够大的消息。问题是,一旦消息的数字长度达到 key 的 1/2 左右,它就会在数学函数中“翻转”到零以上——超过数字字段的上限——并且不会解密到与开始时的编号相同。因此,除非在有限的意义上使用更大的 RSA key ,否则无法克服此限制。或者通过对消息进行分块并以 RSA 形式单独发送所有消息,但不鼓励使用相同的公钥/私钥对进行多重加密。
我强烈建议您使用 RSA/AES 混合算法。通过这种方式,您将获得比我能想到的任何其他方式更好的性能。
关于c - 仅使用 RSA 加密来加密长文本字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31403494/