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.