c - 仅使用 RSA 加密来加密长文本字符串

标签 c encryption openssl cryptography rsa

我正在使用 this link 上给出的 RSA 加密代码用于使用 128 字节公钥加密如下字符串:

[7998725336653383203658644639673805448553730986337128386926545744008381384348409264866333582258561179132241508936069720871865895053632019929236743348039021, 1993938860438750843589842757968313427718259534664174282914852335272086243792497573680387148722647412680490224484736059954284097163105446004304579443902885]

由于字符串太长,RSA_public_encrypt 函数返回 -1null 字符串。我知道 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/

相关文章:

c# - 将 byte[] 填充为 AES 加密的 16 字节倍数

encryption - 使用 openssl 封装 PKCS11 key

android - 如何为 facebook SSO 检索 apk keyhash?

c - 多线程同步

java - 从 CipherInputStream 缓冲读取

c - for, if 在汇编语言中(冒泡排序)

security - 是否有可能通过知道素数和生成器参数来 "hack"Diffie-Hellman?

linux - OpenSSL和CryptoJS SHA256加密转换

c - sizeof 运算符与可变长度数组一起作为函数参数

c - 结构体数组的最后一个元素 - C