Hashes criptográficos: como funcionam e por que são essenciais para a segurança

Uma função de hash criptográfico é um algoritmo matemático que transforma qualquer dado de entrada (texto, arquivo, etc.) em uma string de tamanho fixo — o hash, digest ou checksum. Ela é unidirecional: dado o hash, é computacionalmente inviável recuperar o dado original. Qualquer alteração mínima na entrada produz um hash completamente diferente — essa propriedade é chamada de efeito avalanche.

Comparativo dos principais algoritmos de hash

Algoritmo Tamanho Status de Segurança Uso recomendado
MD5 128 bits / 32 chars hex ❌ Quebrado (1996) Apenas checksums de integridade não crítica
SHA-1 160 bits / 40 chars hex ❌ Quebrado (2017) Depreciado — não usar em sistemas novos
SHA-256 256 bits / 64 chars hex ✅ Seguro Integridade de arquivos, assinaturas digitais, TLS
SHA-384 384 bits / 96 chars hex ✅ Seguro Certificados, documentos críticos
SHA-512 512 bits / 128 chars hex ✅ Seguro Máxima segurança, sistemas de alta exigência
SHA-3 (Keccak) Variável ✅ Seguro (diferente estrutura) Alternativa ao SHA-2 com design diferente
bcrypt Variável (inclui salt) ✅ Seguro (adaptativo) EXCLUSIVAMENTE para senhas — nunca SHA para senhas
Argon2 Variável (inclui salt+cost) ✅ Mais seguro (2015) Melhor escolha para hashing de senhas em 2024

Por que NUNCA usar SHA-256 para armazenar senhas

Hashes criptográficos como SHA-256 foram projetados para serem rápidos — uma GPU moderna calcula bilhões de SHA-256 por segundo. Para senhas, velocidade é inimiga: um atacante com os hashes pode testar bilhões de combinações por segundo (brute force). O SHA-256 também é determinístico: a mesma senha sempre gera o mesmo hash, permitindo ataques de rainbow table. Para senhas, use funções especializadas como bcrypt, Argon2 ou PBKDF2 — são lentas por design e incluem salt automático.

Como usar hashes para verificar integridade de arquivos

Ao baixar software, bibliotecas ou arquivos de fontes externas, você deve verificar o hash do arquivo para garantir que não foi corrompido ou adulterado. O processo é simples: calcule o hash SHA-256 do arquivo baixado e compare com o hash publicado pelo autor. Se forem idênticos, o arquivo está íntegro.

Perguntas frequentes — Gerador de Hash
Qual a diferença entre SHA-256 e SHA-512?
Ambos são seguros e part da família SHA-2. SHA-256 produz um digest de 256 bits (32 bytes, 64 chars hex); SHA-512 produz 512 bits (64 bytes, 128 chars hex). SHA-512 é mais seguro (maior espaço de output) mas requer mais processamento. Em sistemas 64-bit, SHA-512 pode ser mais rápido que SHA-256 por usar operações de 64 bits nativamente.
É seguro gerar hashes de senhas em ferramentas online?
Para hashes de senhas reais, não — use sempre ferramentas offline ou direto no seu código backend. Para textos de teste, desenvolvimento e verificação de integridade não crítica, ferramentas client-side como esta são seguras pois não enviam dados para o servidor. Confirme verificando a aba Rede no DevTools.
O que é um salt e por que é necessário no hashing de senhas?
Salt é um valor aleatório único adicionado a cada senha antes do hashing. Sem salt: two users com a mesma senha têm o mesmo hash — um atacante com a tabela de hashes sabe imediatamente quais usuários usam a mesma senha, e rainbow tables pré-computadas funcionam. Com salt: cada hash é único mesmo para senhas idênticas. Bcrypt e Argon2 incluem salt automaticamente.
Como verificar a integridade de um arquivo baixado com SHA-256?
Linux/Mac: sha256sum arquivo.zip ou shasum -a 256 arquivo.zip. Windows PowerShell: Get-FileHash arquivo.zip -Algorithm SHA256. Compare a saída com o hash publicado pelo autor (geralmente num arquivo .sha256 ou na página de download).
O que é HMAC e quando usar?
HMAC (Hash-based Message Authentication Code) combina uma chave secreta com um hash (ex: HMAC-SHA256). Garante tanto integridade (o dado não foi alterado) quanto autenticidade (veio de quem tem a chave). Usado em JWTs (assinatura), webhooks (verificar origem), APIs REST (autenticação de requisições). Diferente do hash simples: sem a chave, não é possível verificar ou criar um HMAC válido.
Como gerar SHA-256 em Node.js?
const crypto = require("crypto"); const hash = crypto.createHash("sha256").update("texto").digest("hex"); Para HMAC: crypto.createHmac("sha256", "chave-secreta").update("texto").digest("hex"). Para arquivos: crie um stream: const hash = crypto.createHash("sha256"); fs.createReadStream("arquivo").pipe(hash).on("finish", () => console.log(hash.digest("hex")));
Qual a probabilidade de dois inputs diferentes gerarem o mesmo hash (colisão)?
Para SHA-256, a probabilidade de colisão é 1/2^256 ≈ 8.6 × 10^-78 — praticamente zero. A superfície de ataque do SHA-256 não tem colisões conhecidas. MD5 e SHA-1 têm colisões documentadas e por isso são considerados quebrados para uso criptográfico.
Como usar hashes para deduplificação de dados?
Calcule o hash do conteúdo de cada arquivo/registro. Antes de inserir novo dado, calcule seu hash e verifique se já existe no banco. Se o hash existir, o conteúdo é duplicado. Essa técnica é usada em sistemas de armazenamento em nuvem, Git (para commits e blobs) e sistemas de backup incremental.
Por que o MD5 ainda é usado se foi quebrado?
MD5 ainda é usado para verificação de integridade não criptográfica (detectar corrupção acidental de dados em downloads), como checksum não-crítico, e em sistemas legados que não podem ser atualizados. Onde segurança real importa (autenticação, assinaturas digitais, certificados), MD5 foi substituído por SHA-256+.
O que é o hash de commitsno Git e como funciona?
O Git usa SHA-1 (e está migrando para SHA-256) para identificar commits, trees e blobs. O hash de um commit é calculado sobre: os hashes dos arquivos, o hash do commit pai, metadados (autor, data, mensagem). Isso cria uma cadeia criptográfica imutável — qualquer alteração em qualquer ponto da história muda todos os hashes subsequentes.