Como Criar Hashes SHA256 e MD5 em Python Usando hashlib

Como Criar Hashes SHA256 e MD5 em Python Usando hashlib

A geração de hashes criptográficos é fundamental para verificar a integridade de arquivos, validar senhas e identificar dados sem expor seu conteúdo original. Utilizando a biblioteca nativa hashlib, você pode gerar resumos criptográficos nos algoritmos MD5 e SHA256 para strings de texto ou arquivos completos de forma rápida e sem dependências externas.

Python
import hashlib

def gerar_hash_string(texto: str, algoritmo: str = "sha256") -> str:
    # Converte a string em bytes utilizando codificação UTF-8
    dados_bytes = texto.encode("utf-8")
    
    # Instancia o algoritmo desejado (ex: 'md5' ou 'sha256')
    hash_obj = hashlib.new(algoritmo)
    hash_obj.update(dados_bytes)
    
    # Retorna a representação hexadecimal do hash
    return hash_obj.hexdigest()

def gerar_hash_arquivo(caminho_arquivo: str, algoritmo: str = "sha256") -> str:
    hash_obj = hashlib.new(algoritmo)
    
    # Lê o arquivo em blocos binários para otimizar o uso de memória
    with open(caminho_arquivo, "rb") as arquivo:
        for bloco in iter(lambda: arquivo.read(4096), b""):
            hash_obj.update(bloco)
            
    return hash_obj.hexdigest()

# Exemplo prático de uso
if __name__ == "__main__":
    mensagem = "MinhaSenhaSegura123"
    
    # Gerando hash de texto
    hash_md5 = gerar_hash_string(mensagem, algoritmo="md5")
    hash_sha256 = gerar_hash_string(mensagem, algoritmo="sha256")
    
    print(f"MD5 (String): {hash_md5}")
    print(f"SHA256 (String): {hash_sha256}")
    
    # Gerando hash de arquivo
    # hash_file = gerar_hash_arquivo("documento.pdf", algoritmo="sha256")
    # print(f"SHA256 (Arquivo): {hash_file}")

Pontos-chave

  • Obrigatoriedade de Bytes (.encode()): As funções de hash do hashlib operam exclusivamente sobre dados do tipo bytes. Tentar passar uma str sem converter via .encode('utf-8') lançará um erro do tipo TypeError.

  • Leitura Eficiente em Blocos (chunking): Para arquivos grandes, deve-se sempre utilizar o modo de abertura binário (rb) e realizar a leitura em pedaços de memória (ex: 4096 bytes). Isso evita estourar a memória RAM tentando carregar um arquivo inteiro de uma só vez.

  • Saída em Hexadecimal (.hexdigest()): Enquanto .digest() retorna os bytes brutos do hash, o método .hexdigest() entrega uma string formatada em caracteres hexadecimais legíveis, ideal para armazenamento em bancos de dados.

  • Uso Seguro dos Algoritmos: O MD5 possui vulnerabilidades conhecidas de colisão e não deve ser utilizado para segurança ou senhas, sendo restrito para verificações simples de integridade. Para segurança criptográfica, utilize SHA256 ou algoritmos superiores.

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