【问题标题】:CBC DES with pycryptoCBC DES 与 pycrypto
【发布时间】:2019-08-20 15:49:47
【问题描述】:

我试图更好地理解如何在 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'

我在 pycrypto 的文档中没有看到这一点,但我承认,我没有仔细研究过它。

为什么第一个区块会这样被打乱?

【问题讨论】:

    标签: python pycrypto


    【解决方案1】:

    我想我看到了问题......这也发生在 AES CBC 上。该对象维护 CBC 反馈的状态,并将在第一个块中使用它而不是 IV。它将被设置为加密操作的最后一个值。

    随后的块与密文进行异或运算,因此变得清晰,这意味着只有第一个块被加扰。

    创建一个新对象修复它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多