Calculadora de Hash Keccak-256

Faça o hash de texto ou bytes brutos com Keccak-256 como usado pela Ethereum, e compare com SHA3-256 e SHA-256. O resultado é atualizado enquanto você digita; os quatro primeiros bytes são o seletor de função do Solidity.

Calculado no seu navegador com JavaScript. Os endereços nunca são enviados nem armazenados.

O que é Keccak-256?

Keccak-256 é a função de hash esponja de 256 bits que o Ethereum usa em todo lugar: um endereço são os últimos 20 bytes do Keccak-256 da chave pública, um seletor de função são os primeiros 4 bytes do Keccak-256 da assinatura canônica, e tópicos de eventos, checksums EIP-55 e slots de armazenamento derivam todos dele. É a submissão original do Keccak, que difere do SHA3-256 finalizado pelo NIST apenas no byte de preenchimento (padding), por isso as duas funções produzem digests diferentes para a mesma entrada.

Usos típicos

Vetores de teste

EntradaKeccak-256
(vazio)0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
abc0x4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45
Transfer(address,address,uint256)0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Cole qualquer um deles para confirmar a implementação antes de confiar nela.

Keccak-256 vs. SHA3-256 vs. SHA-256

FunçãoFamíliaPadding / construçãoUsada por
Keccak-256Esponja Keccak, taxa de 1088 bitspad10*1 com byte de domínio 0x01Ethereum, Tron (TVM), todas as redes EVM
SHA3-256Esponja Keccak, taxa de 1088 bitspad10*1 com byte de domínio 0x06 (FIPS 202)Aplicações NIST, algumas redes não EVM
SHA-256Merkle–Damgård (SHA-2)padding de comprimento, blocos de 512 bitsBitcoin, txID da Tron, TLS, Base58Check

Exemplo prático: o SHA3-256 de abc em uma biblioteca FIPS 202 retorna 0x3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532, enquanto o Keccak-256 dos mesmos três bytes é o valor 0x4e03657a… da tabela acima. Se um valor de contrato ou de explorador não bate com a sua biblioteca, o byte de padding é a primeira coisa a verificar.

Perguntas frequentes

Keccak-256 é o mesmo que SHA3-256?

Não. O Ethereum adotou o Keccak antes de o NIST finalizar o SHA-3, e o padrão final mudou o byte de padding (0x01 para Keccak, 0x06 para SHA3). Os dois produzem saídas diferentes para a mesma entrada, e é por isso que as bibliotecas web3 chamam a função de keccak256 em vez de sha3. Esta página mostra os dois para que você veja a diferença.

Para que o Ethereum usa o Keccak-256?

Derivar endereços a partir de chaves públicas (últimos 20 bytes do hash), seletores de função e tópicos de eventos (hash da assinatura), checksums EIP-55, cálculo de slots de armazenamento de mappings, nós da trie Merkle-Patricia e os hashes de blocos e transações.

Devo fazer o hash de texto ou de hex?

Escolha texto UTF-8 para assinaturas e strings comuns. Escolha hex quando tiver bytes brutos, por exemplo uma chave pública não comprimida ou dados codificados em ABI; o prefixo 0x é opcional. Fazer o hash do texto "0xabcd" e dos bytes 0xabcd dá resultados diferentes.

O hash é calculado no seu servidor?

Não. Keccak, SHA3 e SHA-256 são implementados em JavaScript nesta página e rodam no seu navegador. A página não faz nenhuma requisição de rede depois de carregar.

Qual é o Keccak-256 de uma string vazia?

0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470. Ele aparece o tempo todo no Ethereum: é o code hash de toda conta que não tem código, e por isso os exploradores o mostram para carteiras comuns.

Posso verificar um valor do Bitcoin aqui?

O SHA-256 está incluído, então você pode aplicar um hash simples aos dados. O duplo SHA-256 e o RIPEMD-160 do Bitcoin não são expostos como saídas separadas, mas o validador de endereços Bitcoin os executa internamente ao verificar endereços.