考虑以下两个代码(基于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)没有恢复?
发布于 2015-04-17 09:40:28
在解密之前,你必须先切掉IV,因为它不是密文的一部分。
decCipher = DES.new(key, DES.MODE_OFB, msg[:DES.block_size])
msgback = decCipher.decrypt(msg[DES.block_size:])与使用IV解密至少恢复部分明文的CBC不同,OFB是一种流模式。如果实际密文与生成的流(基于IV和key)之间的对齐不完美,则无法恢复原始明文。
https://stackoverflow.com/questions/29695473
复制相似问题