【问题标题】:crypto++ RSA public key encryption with long plaintext带有长明文的crypto++ RSA公钥加密
【发布时间】:2013-12-26 21:15:28
【问题描述】:

我正在尝试使用 cryptopp 使用 RSA 公钥/私钥加密来加密/解密一些长文本。我在http://www.cryptopp.com/wiki/RSA上找到了很多例子,包括官方的,但是所有的例子都有一个问题:

它们只允许我加密比密钥大小短一点的数据。

所以问题是:我真的必须自己拆分数据并加密块吗,还是 crypto++ 已经提供了一些功能来处理这个问题(例如 AES 加密的 GCM 或 CFB 模式)?

感谢

【问题讨论】:

    标签: encryption cryptography crypto++


    【解决方案1】:

    一般来说,您不应该使用 RSA 加密大的明文。您可以使用 ECB 加密模式来使用 RSA-OAEP,但这非常慢,并且与更常见的混合加密模式相比没有任何优势。

    在混合加密模式下,您只需使用安全随机数生成器生成对称数据密钥。通常 AES-128 位将足够强大。然后,您使用此密钥加密明文,例如在 CBC 模式下使用 AES;您可以使用零 IV 和 PKCS#7 填充。最后,您使用 RSA-OAEP 加密 AES 密钥;如果无法使用 OAEP,请使用 PKCS#1 v1.5 填充。

    反过来很明显,解密AES密钥,解密密文。

    请注意,您需要至少 11 字节的填充开销(不仅仅是 1 位)从密钥大小中减去,以便在 PKCS#1 v1.5 中使用 RSA 进行加密。填充是 RSA 安全性的一部分。


    您可以通过签名然后加密您的数据来添加完整性保护。您可以按照您的建议使用 AES-GCM,但请注意,攻击者可能仍会加密任何数据并将其发送给接收者。所以 AES-GCM 只能提供有限的完整性保护。

    【讨论】:

    • 对不起,在我的描述中使用了错误的词,我实际上是在尝试使用 RSA-OAEP。但是您的建议只加密AES密钥是有意义的,thanx
    猜你喜欢
    • 2015-04-10
    • 2011-11-07
    • 2020-08-11
    • 2016-01-08
    • 1970-01-01
    • 2015-02-16
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多