Проблема PyCrypto с использованием AES + CTR

Я пишу кусок кода для шифрования текста с использованием симметричного шифрования. Но это не вернется с правильным результатом ...

from Crypto.Cipher import AES
import os

crypto = AES.new(os.urandom(32), AES.MODE_CTR, counter = lambda : os.urandom(16))
encrypted = crypto.encrypt("aaaaaaaaaaaaaaaa")
print crypto.decrypt(encrypted)

Здесь расшифрованный текст отличается от оригинала.

Я не очень разбираюсь в криптографии, поэтому, пожалуйста, потерпите меня. Я понимаю, что режим CTR требует, чтобы функция «счетчик» каждый раз выдавала случайный счетчик, но зачем он должен быть 16 байтов, когда мой ключ имеет длину 32 байта, и он настаивает на том, чтобы мое сообщение было также кратно 16 байтам? Это нормально?

Я предполагаю, что это не возвращает к исходному сообщению, потому что счетчик изменился между шифрованием и дешифрованием. Но тогда, как это теоретически должно работать в любом случае? Что я делаю неправильно? В любом случае, я вынужден прибегнуть к ЕЦБ, пока не пойму это :(

Ответы на вопрос(1)

Ваш ответ на вопрос