Пример шифрования AES OCB не работает должным образом - PullRequest
0 голосов
/ 24 января 2019

Итак, я делаю программу шифрования и надеялся найти некоторую информацию о режиме OCB AES, и в документации, к счастью, был пример, единственная проблема в том, что этот пример на самом деле не работает так, как задумано:

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" выдает ошибку неверного синтаксиса, и я могу понять, почему, потому что он нигде не определен , поэтому я надеялся, что кто-то здесь может просмотретьэтот пример и исправьте его в рабочем примере, чтобы я мог на самом деле понять, как правильно использовать nonce

Я предоставлю ссылку на документацию, где я нашел пример, который находится полностью внизу под OCB.

Ссылка на документацию

1 Ответ

0 голосов
/ 24 января 2019

SyntaxError не имеет никакого отношения к тому, что cipher.nonce не определено. Они используют синтаксис Python 2 в понимании списка. Вам нужны круглые скобки при выполнении понимания списка над литералом кортежа в Python 3:

json_v = [b64encode(x).decode('utf-8') for x in (cipher.nonce, header, ciphertext, tag)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...