首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyCrypto解密混乱

PyCrypto解密混乱
EN

Stack Overflow用户
提问于 2017-03-24 18:52:42
回答 2查看 1.6K关注 0票数 1

所以我现在正在用Python制作一个简单的AES加密/解密系统.但是,当它解密时,它在解密字符串前面有一堆/xxx/。我如何清理它,使它只打印明文。

我的代码是:

代码语言:javascript
复制
import base64
from Crypto.Cipher import AES
from Crypto import Random

key = b'Sixteen byte key'
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CFB, iv)
msg = iv + cipher.encrypt(b'Attack at dawn...')
print (msg)
print (base64.b64encode(msg))

print (cipher.decrypt(msg))

decrypt的输出如下所示:

代码语言:javascript
复制
b'\xfb\xb8\xf0\xc3\xffH\xfc~\x19[\xecy?\xf8\xcc\x80Attack at dawn...'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-24 20:10:44

初始化向量( IV )是加密消息(msg)的一部分,但密文本身应该包含IV。这意味着您必须在解密之前删除IV,例如:

代码语言:javascript
复制
cipher.decrypt(msg[16:])

下一个问题是,您不应该使用相同的AES实例进行加密和解密。AES实例包含不易刷新的内部缓冲区。

代码语言:javascript
复制
key = b'Sixteen byte key'

# encryption
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CFB, iv)
msg = iv + cipher.encrypt(b'Attack at dawn...')
print (msg)
print (base64.b64encode(msg))

# decryption
cipher = AES.new(key, AES.MODE_CFB, msg[:16])
print (cipher.decrypt(msg[16:]))

但是,当它解密时,它在解密字符串前面有一堆/xxx/。

你很幸运,在最后看到了解密的字符串。这仅仅是因为IV被添加到CFB模式的消息和内部工作中。如果您使用CTR模式,这看起来会有很大的不同。

票数 1
EN

Stack Overflow用户

发布于 2017-03-24 19:46:09

文档状态:

这也意味着您不能重用一个对象来使用相同的密钥对其他数据进行加密或解密。

这有点神秘,但如果似乎意味着您不能重用cipher来解密。另外,我不知道为什么要将iv连接到加密的消息中。

下面的代码对我来说很好:

代码语言:javascript
复制
key = b'Sixteen byte key'
iv = Random.new().read(AES.block_size)
c = AES.new(key, AES.MODE_CFB, iv)
msg = c.encrypt('Attack at dawn...')
d = AES.new(key, AES.MODE_CFB, iv)
d.decrypt(msg)
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43007130

复制
相关文章

相似问题

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