SHA-256: O Hash Por Trás de Tudo
SHA-256 é o cavalo de batalha da criptografia moderna. Ele pega qualquer entrada — um único caractere ou um dump inteiro de banco de dados — e produz um hash fixo de 256 bits (32 bytes). Bitcoin usa. Git usa. Certificados TLS usam. Se você trabalha com software, está usando SHA-256 sabendo ou não.
O Que Faz Uma Boa Função Hash
Uma função hash criptográfica tem quatro propriedades:
- Determinística: A mesma entrada sempre produz a mesma saída.
- Tamanho fixo: A saída é sempre 256 bits (64 caracteres hexadecimais), independente do tamanho da entrada.
- Irreversível: Você não consegue recuperar a entrada original a partir do hash.
- Resistente a colisões: É computacionalmente inviável encontrar duas entradas diferentes com o mesmo hash.
SHA-256 em Ação
# Terminal
echo -n "hello" | sha256sum
# 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
echo -n "hello!" | sha256sum
# ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308bPerceba: mudar um caractere muda completamente o hash. Isso é chamado de efeito avalanche — uma mudança minúscula na entrada produz uma saída dramaticamente diferente.
Usos Comuns
| Caso de Uso | Como SHA-256 Ajuda |
|---|---|
| Integridade de arquivos | Baixe um arquivo, faça o hash, compare com o hash publicado. Se batem, o arquivo não foi adulterado. |
| Commits do Git | Todo commit é identificado por um hash SHA do seu conteúdo, pai, autor e timestamp. |
| Assinaturas digitais | Você faz o hash do documento primeiro, depois assina o hash (muito mais rápido que assinar o documento inteiro). |
| Mineração de Bitcoin | Mineradores computam SHA-256(SHA-256(block_header)) buscando um hash abaixo de um limite alvo. |
| HMAC | Combine SHA-256 com uma chave secreta para criar um código de autenticação de mensagem. |
| Certificate pinning | Fixe o hash SHA-256 da chave pública do servidor para prevenir ataques MITM. |
SHA-256 vs Outros Hashes
| Algoritmo | Tamanho da Saída | Status | Caso de Uso |
|---|---|---|---|
| MD5 | 128 bits | Quebrado (colisões encontradas) | Apenas checksums, nunca para segurança |
| SHA-1 | 160 bits | Depreciado (colisões demonstradas) | Apenas sistemas legados |
| SHA-256 | 256 bits | Seguro | Hashing criptográfico de uso geral |
| SHA-512 | 512 bits | Seguro | Quando precisa de hash mais longo |
| SHA-3 | Variável | Seguro | Alternativa à família SHA-2 |
Implementação
// JavaScript (browser ou Node.js)
async function sha256(message) {
const encoder = new TextEncoder();
const data = encoder.encode(message);
const buffer = await crypto.subtle.digest('SHA-256', data);
return Array.from(new Uint8Array(buffer))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
await sha256('hello');
// "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"# Python
import hashlib
hash = hashlib.sha256(b'hello').hexdigest()
print(hash)
# 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824// Go
package main
import (
"crypto/sha256"
"fmt"
)
func main() {
h := sha256.Sum256([]byte("hello"))
fmt.Printf("%x\n", h)
}SHA-256 NÃO É Para Senhas
Esse é o erro mais comum. SHA-256 é rápido — que é exatamente o que você não quer para hashing de senhas. Um atacante pode computar bilhões de hashes SHA-256 por segundo em uma GPU.
Para senhas, use:
- bcrypt — fator de custo ajustável, amplamente suportado
- scrypt — memory-hard, resiste a ataques com GPU
- Argon2 — vencedor da Password Hashing Competition, estado da arte
SHA-256 é para integridade e identificação. Bcrypt/Argon2 são para senhas. Não misture.
Verificando Integridade de Arquivos
# Gerar hash de um arquivo
sha256sum ubuntu-24.04-desktop-amd64.iso
# a1b2c3d4... ubuntu-24.04-desktop-amd64.iso
# Verificar contra um arquivo de checksum
sha256sum -c SHA256SUMS
# ubuntu-24.04-desktop-amd64.iso: OKSempre verifique checksums ao baixar ISOs, binários ou qualquer coisa crítica de segurança. Leva 2 segundos e previne ataques de supply chain.
Faça o hash agora: Gerador SHA-256 — cole qualquer texto e obtenha o hash SHA-256 instantaneamente. Tudo roda no seu navegador.