Criptografia Simétrica em Python: Usando Fernet para Proteger Dados Sensíveis

Criptografia Simétrica em Python: Usando Fernet para Proteger Dados Sensíveis

A criptografia de dados sensíveis em repouso ou em trânsito é essencial para garantir a confidencialidade das informações na sua aplicação. Utilizando a biblioteca cryptography e o módulo Fernet, você implementa criptografia simétrica (onde a mesma chave é usada para codificar e decodificar) com garantia de segurança e proteção contra adulterações.

Python
from cryptography.fernet import Fernet

def exemplo_criptografia():
    # 1. Gera uma chave simétrica segura (guarde esta chave em local seguro!)
    chave = Fernet.generate_key()
    fernet = Fernet(chave)

    mensagem_original = "SuaSenhaOuDadoSensivel123"

    # 2. Criptografa o texto (exige conversão para bytes)
    texto_bytes = mensagem_original.encode('utf-8')
    mensagem_criptografada = fernet.encrypt(texto_bytes)

    # 3. Descriptografa o texto usando a mesma chave
    mensagem_descriptografada_bytes = fernet.decrypt(mensagem_criptografada)
    mensagem_descriptografada = mensagem_descriptografada_bytes.decode('utf-8')

    # Exibição dos resultados
    print(f"Texto Original: {mensagem_original}")
    print(f"Texto Criptografado (token): {mensagem_criptografada.decode('utf-8')}")
    print(f"Texto Descriptografado: {mensagem_descriptografada}")

# Exemplo prático de uso
if __name__ == "__main__":
    exemplo_criptografia()

Pontos-chave

  • Algoritmo de Criptografia Forte: O Fernet utiliza a especificação AES-128 no modo CBC com autenticação HMAC (SHA256), garantindo que a mensagem não possa ser lida nem adulterada sem a chave correta.

  • Manipulação de Bytes: O método encrypt() opera estritamente sobre sequências de bytes (bytes). É obrigatório converter strings para bytes com .encode('utf-8') antes de criptografar e usar .decode('utf-8') após a descriptografia.

  • Gerenciamento de Chaves: Perder a chave gerada por Fernet.generate_key() significa perder o acesso permanente aos dados criptografados. Em aplicações reais, armazene a chave em variáveis de ambiente ou em um gerenciador de segredos (Secret Manager).

  • Tratamento de Exceções: Se a chave informada na descriptografia estiver errada ou os dados tiverem sido corrompidos, o método .decrypt() lançará a exceção cryptography.fernet.InvalidToken.

Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server