2013-12-09 84 views
2

我想加密/解密一些长文本与RSA公钥/私钥加密使用cryptopp。我发现了很多例子,包括http://www.cryptopp.com/wiki/RSA的官员,但所有的例子都有一个问题:加密++ RSA公钥加密与长明文

他们只允许我加密比密钥大小稍短的数据。

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

感谢名单

回答

4

一般来说,你不应该使用加密RSA大明文。您可以使用ECB加密模式使用RSA-OAEP,但速度极其缓慢,与较常见的混合加密模式无关。

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

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

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


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

+0

对不起,在我的描述中使用了错误的词语,我实际上是在尝试使用RSA-OAEP。但是你的建议只对AES密钥进行加密,thanx – Hellagot