Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pycrypto AES CBC_Python_Encryption_Aes_Pycrypto - Fatal编程技术网

Python pycrypto AES CBC

Python pycrypto AES CBC,python,encryption,aes,pycrypto,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 = asci

我已经使用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选项正确地解密了所有内容。有人能帮我找出哪里出错了吗?

这对于密码块链接来说是正常的。在CBC解密中,IV仅用于重建第一块明文。其他纯文本块的计算实际上并不涉及IV。下面是一个图表(来源:用户WhiteTimberwolf,public domain):


所以我想我误解了IV的作用。它只是通过添加额外的混合来增加破解加密的难度,而不是在密钥保密之外添加任何额外的安全元素。谢谢@拉尔斯:IV确实提高了安全性;如果CBC没有IV,则可能发生的攻击由于IV而不可能发生。但是,它不应该是一个秘密,并且大多数明文可以在没有IV的情况下恢复,这一事实不会降低系统的安全性。