gpt4 book ai didi

python - CBC DES 与 pycrypto

转载 作者:行者123 更新时间:2023-12-01 07:23:17 24 4
gpt4 key购买 nike

我试图更好地理解如何使用 Python 中的加密库,但我一直坚持使用 CBC 进行看似极其简单的 DES 加密/解密

from Crypto.Cipher import DES
obj=DES.new('abcdefgh', DES.MODE_CBC, '12345678')
plain='hellohello'
ciph=obj.encrypt(plain + "XXXXXX")
print(ciph)
print(obj.decrypt(ciph))

使用 ECB 时,上述操作很容易,但使用 CBC 时,输出会扰乱前 8 个字符 block 。

这里的输出是:

b'{\x03\x1ca\xe3e\xa2\xd4<DEh\x10 \xf63'
b'e\x13\x1a0J~\xa4gloXXXXXX'

我在 pycrypto 的文档中没有看到这一点,但我承认,我还没有详尽地研究它。

为什么第一个 block 会这样打乱?

最佳答案

我想我看到了问题.... AES CBC 也会发生这种情况。该对象维护 CBC 反馈的状态,并将使用它代替第一个 block 的 IV。它将被设置为加密操作的最后一个值。

后续 block 与密文进行异或运算,因此结果是清晰的,这意味着只有第一个 block 被扰乱。

创建一个新对象可以修复它:

>>> obj=DES.new('abcdefgh', DES.MODE_CBC, '12345678')
>>> obj.decrypt(ciph)
b'hellohelloXXXXXX'

关于python - CBC DES 与 pycrypto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57577352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com