我正试图弄清楚为什么我的Python客户机和Ruby服务器在如何加密数据方面存在分歧。我在Ruby代码和我的代码中看到的唯一区别是它们没有指定初始化向量,因此它回到了默认的all\x0
当我尝试在没有iv的情况下实例化PyCrypto时,它会给我一个错误。下面是一个例子:
from Crypto.Cipher import AES
test = "Very, very confidential data"
key = b'Thirty Two Byte key, made Beef y'
gryp = AES.new(key, AES.MODE_CBC)
(这个例子本质上是来自PyCrypto文档的示例代码,没有指定IV)文档说w/r/t the IV“它是可选的,当不存在时,它将被赋予所有零的默认值。”但是我得到错误“value error:IV必须是16字节长”。
所以我可以指定IV,这并不是问题所在,但我试图弄清楚,如果它认为它不能使用默认值,如果我使用库的方式有其他问题的话。
下面是一个对我有用的实现,其中包含一些修复:
这似乎是Pycrypto的AES类文档中的一个错误,因为AES实现已经更改,因此对于那些需要一个的模式,IV是可选的(即,如果您希望这样做,您必须自己传递16字节的零)。
看这个bug report for the same issue有人没有指定IV并查找在线文档。有一个明确要求IV的变化,本质上,没有人更新在线文档来反映这一点。Pycrypto源中的类文档已更新,但需要重新生成联机文档以反映这一点。
来源的新文件说明:
而不是旧版本的
源代码中指定iv的更新示例是:
相关问题 更多 >
编程相关推荐