我正在尝试使用cryptopp使用RSA公钥/私钥加密来加密/解密一些长文本。我找到了许多例子,包括http://www.cryptopp.com/wiki/RSA上的官员,但所有例子都有一个问题:
它们只允许我加密比密钥大小稍短的数据。
所以问题是:我是否真的必须自己拆分数据并加密阻止块,或者加密++已经提供了一些处理这个功能的函数(如AES加密时的GCM或CFB模式)?
感谢名单
答案 0 :(得分:4)
通常,您不应使用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只能提供有限的完整性保护。