Problema no PyCrypto usando AES + CTR
Estou escrevendo um pedaço de código para criptografar um texto usando criptografia simétrica. Mas não está voltando com o resultado certo ...
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)
Aqui, o texto descriptografado é diferente do original.
Eu realmente não entendo muito sobre criptografia, então por favor, tenha paciência comigo. Entendo que o modo CTR exige uma função "contador" para fornecer um contador aleatório a cada vez, mas por que ele precisa ter 16 bytes quando minha chave é 32 bytes e insiste que minha mensagem também esteja em múltiplos de 16 bytes? Isso é normal?
Suponho que ele não volte à mensagem original porque o contador mudou entre criptografar e descriptografar. Mas então, como é que deveria funcionar teoricamente? O que estou fazendo errado? De qualquer forma, sou forçado a recorrer ao BCE até descobrir isso :(