Aprende a cifrar y descifrar con AES usando PyCryptodome: generación de IV, modo CBC y padding PKCS7. Incluye un ejemplo claro de extremo a extremo.
Cifrado AES con PyCryptodome

AES es un cifrado simétrico moderno. Para hacerlo bien necesitas:

  • Clave (16/24/32 bytes).
  • IV aleatorio (en CBC).
  • Padding si el mensaje no es múltiplo del bloque (16 bytes).

1) Instalar librería

pip install pycryptodome

2) Ejemplo (texto)

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

def pkcs7_pad(data, block=16):
    pad = block - (len(data) % block)
    return data + bytes([pad]) * pad

def pkcs7_unpad(data):
    pad = data[-1]
    return data[:-pad]

key = get_random_bytes(32)  # AES-256
iv = get_random_bytes(16)

plain = "Mensaje secreto".encode("utf-8")
cipher = AES.new(key, AES.MODE_CBC, iv=iv)
enc = cipher.encrypt(pkcs7_pad(plain))

cipher2 = AES.new(key, AES.MODE_CBC, iv=iv)
dec = pkcs7_unpad(cipher2.decrypt(enc))
print(dec.decode("utf-8"))

3) Nota importante

Para archivos reales, además de cifrar, conviene autenticar (por ejemplo con GCM o HMAC) para detectar modificaciones.