AES OCB加密示例无法正常工作

时间:2019-01-23 21:55:11

标签: python encryption

因此,我正在编写一个加密程序,希望能找到有关AES的OCB模式的一些信息,幸运的是,文档中有一个带有该示例的示例,唯一的问题是该示例实际上并未按预期工作:

import json
from base64 import b64encode
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

header = b"header"
data = b"secret"
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_OCB)
cipher.update(header)
ciphertext, tag = cipher.encrypt_and_digest(data)

json_k = [ 'nonce', 'header', 'ciphertext', 'tag' ]
json_v = [ b64encode(x).decode('utf-8') for x in cipher.nonce, header,                                                                                                                                     
ciphertext, tag ]
result = json.dumps(dict(zip(json_k, json_v)))
print(result)

在定义json_v的行中,它告诉我“ cipher.nonce”产生无效的语法错误,我可以理解为什么原因,因为它在任何地方均未定义,所以我希望这里有人来看看这个示例并将其修复为一个有效的示例,这样我就可以真正了解如何正确使用随机数

我将提供指向文档的链接,在该示例中,示例始终位于OCB的底部。

Link to the documentation

1 个答案:

答案 0 :(得分:2)

SyntaxError与cipher.nonce未定义无关。他们在列表理解中使用Python 2语法。在Python 3中对元组文字执行列表理解时,需要使用括号。

json_v = [b64encode(x).decode('utf-8') for x in (cipher.nonce, header, ciphertext, tag)]