Python:如何添加RSA填充?

时间:2009-03-18 19:24:05

标签: python encryption rsa

我一直在查看大多数python加密库,我决定使用PyCrypto或M2Crypto。
我放弃了ezPyCrypto,因为它只支持MD5进行签名和Keyczar,因为它还不够成熟。

所以我读过如果要加密的文本(或签名哈希)未正确填充,RSA很容易受到多次攻击。
这是什么意思?
PyCrypto或M2Crypto都没有提到任何关于这一点,谷歌没有找到任何相关的东西。这些库是否会自动添加paddign?怎么能说出来?

如果上述答案为否,那么什么被认为是正确的填充?

5 个答案:

答案 0 :(得分:6)

PyCrypto不添加提到的填充。
相反,M2Crypto会这样做。

M2Crypto构建于openSSL之上,主要支持您需要的所有内容,仍然维护和更新,而PyCrypto会发出多个弃用警告。

答案 1 :(得分:3)

随机填充的原因之一可能是“来自书籍”具有低指数的RSA(假设3)如果将完全相同的消息发送给多个人,则可以非常简单地破解(为三个)。

因此,您最好通过在之前对您的消息应用某种随机(但不可逆)转换来确保不发送完全相同的消息。

也许这就是padding的意思!?

编辑: 我查看了维基百科。我所说的是哈斯塔德的攻击。<​​/ p>

答案 2 :(得分:1)

我最近一直在努力搞清楚加密...这篇文章帮助解释了填充的内容:

http://www.di-mgt.com.au/cryptopad.html

(方法一对我来说似乎最容易实现)

如果需要,我可以分享一些代码段。

P.S。此文件在帮助创建安全密钥(google for it)PBKDF2.py - PKCS#5 v2.0基于密码的密钥派生方面也派上了用场

答案 3 :(得分:0)

不完全确定,但如果您在RSA消息中添加随机组件,则可以防止字典攻击

答案 4 :(得分:0)

首先,您应该使用AES,因为它是事实上的标准。

AES以16字节的块大小加密字节。显然,这适用于任何大型数据。但最后一点,显然可能小于16字节。

对于最后一个块,你需要填充它,典型的填充是通过PCKS7完成的,这非常简单。

假设你有一个字符串:“icecream”作为最后一个块。

"icecream"是8个字节,因此您需要另外8个字节来构建块

所以你所做的只是将角色8(不是'8')追加8次

"icecream\x08\x08\x08\x08\x08\x08\x08\x08"

将是你的结果字符串。现在你继续加密数据。

请记住,在解密时,您需要捕获最后一个块,并在使用前删除填充。