(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo realizar el cifrado de campos sensibles en ETL: paso a paso

João Barros 19 de October de 2026 4 min de lectura

Proteger campos sensibles (p. ej.: NIF, email, tarjeta) durante un pipeline ETL evita exposición y cumple requisitos legales. Este tutorial muestra cómo realizar el cifrado de campos sensibles en ETL con un ejemplo práctico en Python, para que los datos queden seguros antes de ser cargados en una base de datos.

Pre-requisitos

  • Python 3.8+ instalado
  • Biblioteca cryptography instalada (pip install cryptography)
  • Un fichero CSV de muestra con campos sensibles
  • Conocimientos básicos de Python y ETL (lectura, transformación, escritura)

Paso 1: Por qué cifrar en el ETL

Cifrar en el ETL protege datos en reposo y reduce el riesgo de fuga en caso de que la base de datos o el almacenamiento sean comprometidos. Es distinto del enmascaramiento (donde el valor pierde utilidad): el cifrado permite recuperar el valor con la clave correcta, por lo que es útil para escenarios que necesitan reversibilidad controlada.

Paso 2: Elegir el método de cifrado

Usaremos cifrado simétrico con Fernet de la biblioteca cryptography — es sencillo, seguro para muchos casos y proporciona cifrado + firma (integridad). Evita inventar algoritmos; sigue el estándar.

Paso 3: Preparar clave y utilidades

Crear una clave segura, guardarla de forma segura (p. ej.: Azure Key Vault, Secrets Manager). Para este ejemplo generamos localmente y mostramos funciones mínimas para cifrar/descifrar.

from cryptography.fernet import Fernet

# Gerar chave (fazer uma vez e guardar com segurança)
key = Fernet.generate_key()
fernet = Fernet(key)
print(key.decode())  # guarda esta chave com segurança

# Funções utilitárias
def encrypt_value(value: str) -> str:
    if value is None:
        return None
    return fernet.encrypt(value.encode()).decode()

def decrypt_value(token: str) -> str:
    if token is None:
        return None
    return fernet.decrypt(token.encode()).decode()

Paso 4: Leer los datos e identificar campos a cifrar

Lee el fichero CSV y define cuáles son las columnas sensibles. En este ejemplo ciframos 'email' y 'nif'.

import csv

input_file = 'clientes.csv'
output_file = 'clientes_encriptado.csv'
sensitive_cols = ['email', 'nif']

with open(input_file, newline='', encoding='utf-8') as infile:
    reader = csv.DictReader(infile)
    rows = list(reader)

Paso 5: Aplicar cifrado durante la transformación

Itéra las filas y sustituye los valores sensibles por el token cifrado. Mantén otras columnas intactas. Evita cifrar valores vacíos.

transformed = []
for row in rows:
    new_row = row.copy()
    for col in sensitive_cols:
        val = row.get(col)
        if val and val.strip() != '':
            new_row[col] = encrypt_value(val)
        else:
            new_row[col] = ''
    transformed.append(new_row)

Paso 6: Grabar los datos cifrados

Escribe el CSV de salida con los valores cifrados. Este fichero puede ser cargado en una base de datos; solo quien tenga la clave puede descifrar.

with open(output_file, 'w', newline='', encoding='utf-8') as outfile:
    writer = csv.DictWriter(outfile, fieldnames=transformed[0].keys())
    writer.writeheader()
    for r in transformed:
        writer.writerow(r)

print('Ficheiro escrito:', output_file)

Paso 7: Cómo descifrar cuando sea necesario

Para operaciones legítimas que requieran el valor original (p. ej.: envío de email autorizado), usar la función de descifrado con control de acceso y registro. Nunca incorpores la clave en el código en producción.

# Exemplo de desencriptação pontual
sample_encrypted = transformed[0]['email']
original = decrypt_value(sample_encrypted)
print('Original:', original)

Verificar el resultado

Confirma que en el fichero de salida los campos sensibles están reconociblemente cifrados (cadenas largas con / y caracteres base64). Verifica también que el proceso de descifrado recupera exactamente el valor original y que otros campos permanecen iguales.

Conclusión

Cifrar campos sensibles en el ETL es una medida práctica para reducir riesgo y cumplir políticas de protección de datos. Siguiente paso: integrar la gestión de claves con un servicio seguro (p. ej.: Azure Key Vault) y aplicar cifrado a flujos incrementales. Consejo: ¿ya has validado dónde vas a guardar la clave y quién tiene acceso?