pycrypto AES CBC

时间:2018-11-10 00:21:04

标签: python encryption aes pycrypto

我已经使用pycrypt库编写了一些代码,但我一定做错了,但是我无法弄清楚我做错了什么。我可以(几乎)使用错误的初始化向量解密消息,即使我相信我正在遵循它们的示例。

from Crypto.Cipher import AES
import os
from string import ascii_letters

key, iv = os.urandom(32), os.urandom(16)
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = ascii_letters
plaintext += ' ' * (-len(plaintext) % 16)  # Padding
ciphertext = cipher.encrypt(plaintext)

cipher = AES.new(key, AES.MODE_CBC, os.urandom(16))
text = cipher.decrypt(ciphertext)
# text[16:] = b'qrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ            '

现在,除了解密文本的前16个字节以外,您可以使用完全随机选择的IV正确解密所有内容。有人可以帮我弄清楚我要去哪里了吗?

1 个答案:

答案 0 :(得分:1)

这对于密码块链接是正常的。在CBC解密中,IV仅是重建第一段明文所必需的。其他明文块的计算实际上并不涉及IV。这是一个图表(来源:Wikimedia用户WhiteTimberwolf,公共领域):

CBC decryption diagram