Как я могу зашифровать открытый текст с заданным ключом и iv, используя AES-128-CTR в python 3.7? - PullRequest
1 голос
/ 27 апреля 2019

Я пытаюсь использовать python 3.7.3 для шифрования заданного открытого текста с заданным ключом и заданным iv.Я не знаком с библиотеками шифрования python, но пару часов пытался это выяснить, но не могу.

Я устал использовать библиотеку pycryptodome, так как не смог использовать crypto и pycrypto(продолжаю получать ошибки, когда я их устанавливаю, может быть, потому что я нахожусь в Windows?).

from Crypto.Cipher import AES
from Crypto.Util import Counter

data = b"plaintext"
key = b"5A557AC90890B2ACD59C536FE4279BBC"
iv = b"5A557AC90890B2ACD59C536FE4279BBC"

counter = Counter.new(128, initial_value=iv)
cipher = AES.new(key, AES.MODE_CTR, counter=counter)

enc = cipher.encrypt(data)

print(enc)

Мой конечный результат - распечатать зашифрованную строку, но в настоящее время я получаю различные ошибки, такие как «не поддерживается»между экземплярами 'bytes' и 'int' "

1 Ответ

2 голосов
/ 27 апреля 2019

Ваш код не использует Counter правильно. Вы пытаетесь использовать шестнадцатеричное число там, где должно быть целое число, и даже если вы конвертируете свое значение iv в целое число, оно будет слишком большим.

initial_value ( integer ) - Начальное значение счетчика. По умолчанию значение равно 1.

Таким образом, изменение кода на следующий будет работать, например:

counter = Counter.new(128, initial_value=1)

Если вы хотите рандомизировать iv, вы можете сделать что-то вроде:

iv = int.from_bytes(os.urandom(16), sys.byteorder)
counter = Counter.new(128, initial_value=iv)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...