我一直在查看大多数python加密库,我决定使用PyCrypto或M2Crypto。
我放弃了ezPyCrypto,因为它只支持MD5进行签名和Keyczar,因为它还不够成熟。
所以我读过如果要加密的文本(或签名哈希)未正确填充,RSA很容易受到多次攻击。
这是什么意思?
PyCrypto或M2Crypto都没有提到任何关于这一点,谷歌没有找到任何相关的东西。这些库是否会自动添加paddign?怎么能说出来?
如果上述答案为否,那么什么被认为是正确的填充?
答案 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"
将是你的结果字符串。现在你继续加密数据。
请记住,在解密时,您需要捕获最后一个块,并在使用前删除填充。