Hash SHA-256 do Texto “Hello, World!”
O hash SHA-256 do texto Hello, World! é:
dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
São 64 caracteres hexadecimais representando 256 bits. Você pode verificar issó em qualquer ambiente:
# Terminal (macOS/Linux)
echo -n "Hello, World!" | sha256sum
# Alternativa macOS
echo -n "Hello, World!" | shasum -a 256
# Python
import hashlib
hashlib.sha256(b"Hello, World!").hexdigest()
# Node.js
const crypto = require('crypto');
crypto.createHash('sha256').update('Hello, World!').digest('hex');
Todos devem retornar dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f. Se você obtiver um resultado diferente, verifique a quebra de linha final. echo sem -n adiciona uma quebra de linha, alterando a entrada é o hash.
O Que SHA-256 Realmente Faz
SHA-256 faz parte da família SHA-2, padronizada pelo NIST em 2001. Recebe uma entrada de tamanho arbitrário e produz uma saída fixa de 256 bits. O algoritmo funciona em vários estágios:
Pré-processamento
A entrada é preenchida para que seu comprimento seja congruente a 448 módulo 512 bits. Uma representação de 64 bits do comprimento da mensagem original é anexada. Issó garante que o comprimento total seja múltiplo de 512 bits.
Programa de mensagens
A entrada preenchida é dividida em blocos de 512 bits. Cada bloco é expandido em 64 palavras de 32 bits usando operações bit a bit (XOR, deslocamentos à direita, rotações).
Compressão
Uma função de compressão executa 64 rodadas sobre o estado atual do hash usando as 64 palavras mais 64 constantes de rodada derivadas das partes fracionárias das raízes cúbicas dos primeiros 64 números primos. O estado são oito variáveis de 32 bits (a a h) inicializadas a partir das raízes quadradas fracionárias dos primeiros 8 números primos.
Hash final
Após processar todos os blocos, as oito variáveis de estado são concatenadas para produzir a saída de 256 bits.
Quatro Propriedades Importantes
Determinístico
A mêsma entrada sempre produz o mêsmo hash. Hello, World! é sempre dffd6021.... Issó torna hashes úteis como identificadores estáveis.
Saída de tamanho fixo
Um único caractere é um arquivo de 10 GB ambos produzem um hash de 256 bits. Essa propriedade torna o hashing útil para comparar arquivos sem comparar seu conteúdo byte a byte.
Efeito avalanche
Alterar um único bit na entrada muda completamente a saída. Hello, World! e Hello, World? produzem hashes que compartilham quase nenhum bit. Issó significa que você não pode inferir nada sobre a entrada a partir de pequenas mudanças no hash.
Resistência a pré-imagem
Dado um hash, você não pode trabalhar de volta para encontrar a entrada. Este é o fundamento de como o hash de senhas (em alto nível) e assinaturas digitais funcionam.
Onde SHA-256 É Usado
Verificação de integridade de arquivos
Quando você baixa um software, o projeto geralmente pública um checksum SHA-256 junto com o binário. Você hasheia o arquivo baixado e compara. Se corresponderem, o arquivo não foi adulterado durante o trânsito.
sha256sum downloaded-file.tar.gz
# compare com o checksum publicado
Bitcoin
O algoritmo de proof of work do Bitcoin exige que mineradores encontrem um nonce tal que SHA-256(SHA-256(block_header)) produza um hash abaixo de um valor alvo. A construção SHA dupla 256 foi escolhida por Satoshi Nakamoto para se defender contra ataques de extensão de comprimento, que afetam SHA-256 simples.
Verificação de certificados TLS
Certificados X.509 são assinados com um hash de seu conteúdo. SHA-256 é o padrão para assinaturas de certificados; SHA-1 foi depreciado e removido de autoridades certificadoras confiáveis por volta de 2017.
Construção HMAC
HMAC-SHA-256 usa SHA-256 como o hash subjacente em um código de autenticação de mensagem. É usado na verificação de assinatura JWT (HS256), assinatura de requisições AWS e muitos esquemas de autenticação de API.
Armazenamento de objetos Git
Git armazena todo arquivo, árvore de diretório e commit como um objeto endereçado por conteúdo. O SHA do objeto (historicamente SHA-1, em transição para SHA-256) é computado a partir de seu conteúdo é usado tanto como chave de armazenamento quanto como verificação de integridade.
SHA-256 Não É Suficiente para Armazenamento de Senhas
SHA-256 é rápido, intencionalmente. Para integridade de arquivos e assinaturas digitais, velocidade é desejável. Para hash de senhas, é uma desvantagem. Um atacante com uma GPU pode calcular bilhões de hashes SHA-256 por segundo, tornando ataques de força bruta e dicionário contra um banco de dados de senhas hasheadas com SHA-256 práticos.
Use uma função de hash de senhas específica:
- bcrypt: deliberadamente lento, com fator de custo configurável. A escolha padrão para a maioria das aplicações web.
- Argon2: vencedor da Password Hashing Competition (2015). Custo de memória e CPU configurável, resistente a ataques de GPU. Prefira a variante
argon2id. - scrypt: memory-hard como Argon2, usado por algumas criptomoedas.
Essas funções incluem um salt aleatório por usuário (prevenindo ataques de rainbow table) e são projetadas para serem ajustadas para mais lentas conforme o hardware melhora.
Se você está armazenando senhas, não use SHA-256 diretamente, nem mêsmo com salt. Use bcrypt ou Argon2.
Comparando SHA-256 com SHA-1 e MD5
| Algoritmo | Tamanho da saída | Status |
|---|---|---|
| MD5 | 128 bits (32 hex chars) | Quebrado. Ataques de colisão práticos existem |
| SHA-1 | 160 bits (40 hex chars) | Quebrado. Ataque SHAttered (2017) demonstrou colisão prática |
| SHA-256 | 256 bits (64 hex chars) | Seguro. Nenhuma fraqueza conhecida |
| SHA-3-256 | 256 bits (64 hex chars) | Seguro. Estrutura interna diferente (Keccak sponge) |
MD5 e SHA-1 ainda são usados em contextos não relacionados à segurança (checksums para detecção de erros, identificadores de sistemas legados) onde a resistência a colisões não importa. Para qualquer contexto onde um atacante possa tentar produzir duas entradas com o mêsmo hash (fraude de certificados, substituição de arquivos, falsificação de assinaturas), apenas SHA-256 ou mais forte deve ser usado.