Cifrando y descifrando datos en Python

En ciertos momentos necesitamos cifrar datos en el backend para protegerlos. Si estás en el ecosistema de Python, tienes una biblioteca fantástica para ello: cryptography. Por debajo usa OpenSSL, así que es rápida y segura. Por encima está Fernet, que es una capa de abstracción que hace que sea muy fácil de usar.

Para usarla, primero, añade la dependencia a tu proyecto:

cryptography>=42

O instálala con pip:

pip install cryptography

El siguiente paso es crítico. Tienes que generar una clave de cifrado y guardarla en un lugar seguro. Si la pierdes, no podrás recuperar los datos. Y obviamente, si alguien más la obtiene, podrá descifrar todo. No está de más recordar que sería buena idea guardarla en una variable de entorno y/o en un vault seguro.

Para generarla puedes usar un script:

python -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())' > encryption_key.txt

Fernet usa cifrado simétrico (AES-128-CBC + HMAC-SHA256). La clave de 32 bytes generada se divide en dos mitades: una para el cifrado y otra para la autenticación. Internamente, la clave se genera con os.urandom(32) codificado en base64 url-safe.

Con ello ya podemos trabajar.

Importamos la clase Fernet:

from cryptography.fernet import Fernet

Importamos nuestra clave. Idealmente, la habremos guardado en una variable de entorno:

from os import getenv
encryption_key = getenv("ENCRYPTION_KEY").encode()

Y ya podemos cifrar nuestro primer texto:

fernet = Fernet(encryption_key)
cipher_text = fernet.encrypt(b"Texto que quiero proteger")

Para descifrarlo, solo tenemos que usar el mismo objeto Fernet:

plain_text = fernet.decrypt(cipher_text)
print(plain_text.decode())  # "Texto que quiero proteger"

Ahora centrémonos en el caso que busquemos proteger un binario, como un archivo. El proceso es el mismo, pero con archivos:

# Cifrar un archivo
with open("archivo_original.pdf", "rb") as file:
    original_data = file.read()
cipher_data = fernet.encrypt(original_data)
with open("archivo_cifrado.enc", "wb") as file:
    file.write(cipher_data)

Y con esto ya tenemos lo básico para cifrar y descifrar datos. Úsalo en las columnas de tus bases de datos, en los archivos que guardes, o en lo que necesites. Solo recuerda: la seguridad de tus datos depende de la seguridad de tu clave. Cuídala como si fuera oro.

Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.

¿Me invitas a un café?

Comentarios

Todavía no hay ningún comentario.

Escrito por Andros Fenollosa

mayo 18, 2026

2 min de lectura

Sigue leyendo

Visitantes en tiempo real

Estás solo: 🐱