PyCrypto Decryption Mess

时间:2017-03-24 18:52:43

标签: python python-3.x encryption cryptography pycrypto

所以我现在正试图在Python中创建一个简单的AES加密/解密系统...但是当它解密时,它在解密的字符串前面有一堆/ xxx / xxx / xxx / xxx / 。如何清洁并使其仅打印明文。

我的代码是:

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的输出如下所示:

b'\xfb\xb8\xf0\xc3\xffH\xfc~\x19[\xecy?\xf8\xcc\x80Attack at dawn...'

2 个答案:

答案 0 :(得分:1)

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

cipher.decrypt(msg[16:])

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

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 / xxx / xxx / xxx /。

你很幸运,你在最后看到了解密的字符串。这只是因为IV被预先附加到消息和CFB操作模式的内部工作。如果您使用了点击率模式,这看起来会有很大不同。

答案 1 :(得分:-2)

docs州:

  

这也意味着您无法使用相同的密钥重用对象来加密或解密其他数据。

这有点神秘,但如果似乎意味着您无法重用cipher来解密。另外,我不确定为什么要将iv连接到加密邮件。

以下代码适用于我:

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)