Estoy escribiendo un fragmento de código para cifrar un texto utilizando cifrado simétrico. Pero no regresa con el resultado correcto ...Problema de PyCrypto con 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)
Aquí, el texto descifrado es diferente del original.
Realmente no entiendo mucho acerca de la criptografía, así que por favor tengan paciencia conmigo. Entiendo que el modo CTR requiere una función "contador" para suministrar un contador aleatorio cada vez, pero ¿por qué necesita que sea de 16 bytes cuando mi clave es de 32 bytes e insiste en que mi mensaje también está en múltiplos de 16 bytes? ¿Esto es normal?
Supongo que no volverá al mensaje original porque el contador cambió entre cifrar y descifrar. Pero entonces, ¿cómo se supone que funciona teóricamente de todos modos? ¿Qué estoy haciendo mal? De todos modos, me veo obligado a recurrir al BCE hasta que resuelva esto :(
impresionante. Ok, lo entiendo. ¿Entonces, esencialmente, CTR no tiene ninguna ventaja sobre ECB si solo quiero encriptar una o muy pocas cosas? Solo quiero almacenar algunas contraseñas en todas las sesiones. ¿Necesito AES o debería usar algo más simple? – xster
En realidad, CTR puede encriptar cualquier cantidad arbitraria de texto; convierte un cifrado de bloque en un generador de flujo de clave. No existe una razón real para la restricción de que la entrada sea múltiplos de un tamaño de bloque en este caso. –
PyCrypto parece dar un error cuando la entrada no es un múltiplo de 16 bytes, sin embargo, – xster