python - DES.MODE_OFB 无法恢复明文

标签 python encryption des pycrypto

考虑下面的两个代码(基于 http://pythonhosted.org//pycrypto/ ):

1) DES.MODE_ECB

from Crypto.Cipher import DES    
from Crypto import Random    
key = b'Eight888'    
cipher = DES.new(key, DES.MODE_ECB)    
plaintext = b'sona si latine loqueris '    
msg = cipher.encrypt(plaintext)    
msgback= cipher.decrypt(msg)

2) DES.MODE_OFB

from Crypto.Cipher import DES
from Crypto import Random
key = b'Eight888'
iv = Random.new().read(DES.block_size)
cipher = DES.new(key, DES.MODE_OFB, iv)
plaintext = b'sona si latine loqueris '
msg = iv + cipher.encrypt(plaintext)
msgback= cipher.decrypt(msg)

为什么代码 1) 可以恢复原始明文,而 2) 却不能?

最佳答案

解密之前您必须切掉 IV,因为它不是密文的一部分。

decCipher = DES.new(key, DES.MODE_OFB, msg[:DES.block_size])
msgback = decCipher.decrypt(msg[DES.block_size:])

与使用 IV 解密至少恢复部分明文的 CBC 不同,OFB 是一种流模式。如果实际密文和生成流(基于 IV 和 key )之间的对齐不完美,则无法恢复原始明文。

关于python - DES.MODE_OFB 无法恢复明文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29695473/

相关文章:

c# - 通过提供模数和指数进行 RSA 加密

delphi - 将 ActionScript 转换为 Delphi

c# - C# 中的 DES 初始化向量

java - DES-加密字节数组,java

python - GridSearchCV中如何进行stratifiedShuffleSplit?

python - 如何在python中构造一组列表项?

postgresql - 加密 PostgreSQL 数据库并从 Web 应用程序用户处获取 key

python - 使用 Numpy 的多项式的系数误差

python - 了解二元分类器的精度和召回结果

c# - 如何在 C# 中使用三重 DES 执行 ISO 9797-1 MAC?