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

Como fazer encriptação de campos sensíveis em ETL: passo a passo

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

Proteger campos sensíveis (ex.: NIF, email, cartão) durante um pipeline ETL evita exposição e cumpre requisitos legais. Este tutorial mostra como fazer encriptação de campos sensíveis em ETL com um exemplo prático em Python, para que os dados fiquem seguros antes de serem carregados numa base de dados.

Pré-requisitos

  • Python 3.8+ instalado
  • Biblioteca cryptography instalada (pip install cryptography)
  • Um ficheiro CSV de amostra com campos sensíveis
  • Conhecimentos básicos de Python e ETL (leitura, transformação, escrita)

Passo 1: Porquê encriptar no ETL

Encriptar no ETL protege dados em repouso e reduz o risco de fuga caso a base de dados ou o armazenamento sejam comprometidos. É diferente de mascaramento (onde o valor perde utilidade): a encriptação permite recuperar o valor com a chave correta, pelo que é útil para cenários que necessitam de reversibilidade controlada.

Passo 2: Escolher o método de encriptação

Usaremos encriptação simétrica com Fernet da biblioteca cryptography — é simples, segura para muitos casos e fornece encriptação + assinatura (integridade). Evita inventar algoritmos; segue o padrão.

Passo 3: Preparar chave e utilitários

Criar uma chave segura, guardá‑la de forma segura (ex.: Azure Key Vault, Secrets Manager). Para este exemplo geramos localmente e mostramos funções mínimas para encriptar/desencriptar.

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()

Passo 4: Ler os dados e identificar campos a encriptar

Lê o ficheiro CSV e define quais as colunas sensíveis. Neste exemplo encriptamos 'email' e '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)

Passo 5: Aplicar encriptação durante a transformação

Itera as linhas e substitui os valores sensíveis pelo token encriptado. Mantém outras colunas intactas. Evita encriptar valores vazios.

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)

Passo 6: Gravar os dados encriptados

Escreve o CSV de saída com os valores encriptados. Este ficheiro pode ser carregado numa base de dados; só quem tiver a chave pode desencriptar.

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)

Passo 7: Como desencriptar quando necessário

Para operações legítimas que necessitem do valor original (ex.: envio de email autorizado), usar a função de desencriptação com controlo de acesso e registo. Nunca incorpores a chave no código em produção.

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

Verificar o resultado

Confirma que no ficheiro de saída os campos sensíveis estão reconhecivelmente encriptados (cadeias longas com / e caracteres base64). Verifica também que o processo de desencriptação recupera exatamente o valor original e que outros campos permanecem iguais.

Conclusão

Encriptar campos sensíveis no ETL é uma medida prática para reduzir risco e cumprir políticas de proteção de dados. Próximo passo: integrar a gestão de chaves com um serviço seguro (ex.: Azure Key Vault) e aplicar encriptação a fluxos incrementais. Dica: já validaste onde vais guardar a chave e quem tem acesso?