Python 带pycrypto的CBC-DES

Python 带pycrypto的CBC-DES,python,pycrypto,Python,Pycrypto,我正试图更好地理解如何使用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

我正试图更好地理解如何使用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个字符块进行置乱

这里的输出是:

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

b'{\x03\x1ca\xe3e\xa2\xd4我想我看到了问题……AES CBC也会出现这种情况。对象会保持CBC反馈的状态,并在第一个块中使用它而不是IV。它会被设置为加密操作的最后一个值

随后的块与密文进行异或运算,因此结果清晰,这意味着只有第一个块被置乱

创建新对象将修复它:

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