首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pycrypto AES CBC

pycrypto AES CBC
EN

Stack Overflow用户
提问于 2018-11-10 08:21:04
回答 1查看 634关注 0票数 1

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

代码语言:javascript
复制
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来正确解密所有内容。有人能帮我找出哪里出错了吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-10 08:34:37

这对于密码块链接来说是正常的。在CBC解密中,IV只需要重建第一个明文块。其他明文块的计算实际上并不涉及IV,如下图所示(来源:Wikimedia user WhiteTimberwolf,公共领域):

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53234913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档