Gerador de Hash Keccak-256

Calcule hashes Keccak para a Ethereum, além de seletores de função e topics de eventos. Tudo processado no seu navegador.

Ethereum Use Cases

Function selector = first 4 bytes of Keccak-256 of the function signature. Event topic = full 32-byte Keccak-256.

Ethereum Applications of Keccak-256

Function SelectorFirst 4 bytes of keccak256("functionName(types)")
Event Topickeccak256("EventName(types)") — full 32 bytes
Address Checksum (EIP-55)keccak256 of lowercase hex address controls casing
Storage Slotkeccak256(abi.encode(key, slot)) for mappings
Commit-Revealkeccak256(abi.encode(secret, nonce)) for hidden commitments

O que esta ferramenta faz

Digite ou cole uma entrada e o hash aparece na hora, sem precisar clicar em nada. O algoritmo Keccak está implementado na própria página, então não existe nenhuma requisição ao servidor.

  • Quatro variantes — Keccak-256, 512, 224 e 384, calculadas de uma vez.
  • Três codificações de entrada — UTF-8, hexadecimal ou Base64, conforme o formato do seu dado.
  • Comparação com SHA-256 — exibida ao lado, para você ver que os valores não coincidem.
  • Seletor e topic — a partir de uma assinatura de função você obtém o seletor de 4 bytes e o topic de evento de 32 bytes.
  • Arquivos — é possível carregar um arquivo e calcular o hash sem enviá-lo a lugar nenhum.

Keccak-256 não é SHA3-256

Essa é a pegadinha que consome mais horas em Ethereum. Os dois usam a construção esponja do Keccak, mas o NIST trocou o byte de preenchimento ao padronizar o SHA-3: 0x01 no Keccak original, 0x06 no SHA-3. A Ethereum já havia adotado o primeiro.

Na prática: se você calcular um hash com uma biblioteca que expõe sha3_256 e comparar com o que o keccak256() do Solidity devolve, eles nunca vão bater. Em Python, hashlib.sha3_256 não resolve; você precisa de eth_hash ou pysha3.keccak_256.

Seletor de função e topic de evento

O seletor são os primeiros 4 bytes do Keccak-256 da assinatura canônica. O topic de um evento são os 32 bytes completos:

transfer(address,uint256)    -> 0xa9059cbb
approve(address,uint256)     -> 0x095ea7b3
balanceOf(address)           -> 0x70a08231

Transfer(address,address,uint256)
-> 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Atenção à assinatura canônica: sem espaços, sem nomes de parâmetros e com o tamanho explícito. uint se escreve uint256; se você omitir, o seletor sai diferente e a chamada reverte.

Onde o Keccak-256 aparece na Ethereum

  • Endereços — os últimos 20 bytes do Keccak-256 da chave pública.
  • Slots de storage — a posição de uma entrada de mapping é calculada hasheando a chave junto com o número do slot.
  • Logs — o primeiro topic de um evento não anônimo é o hash da assinatura dele.
  • EIP-712 — o hash do domínio e da struct, para assinaturas de dados legíveis.
  • CREATE2 — o endereço resultante depende do Keccak-256 do bytecode de inicialização.

Perguntas frequentes

Keccak-256 é a mesma coisa que SHA3-256?

Não, e confundir os dois é o erro mais comum. A Ethereum adotou o Keccak antes de o NIST fechar o padrão SHA-3, e o NIST trocou o byte de preenchimento de 0x01 para 0x06. Resultado: para a mesma entrada, o keccak256() do Solidity e o SHA3-256 devolvem hashes diferentes. Esta ferramenta implementa o Keccak original usado pela Ethereum.

O que é o seletor de função?

São os primeiros 4 bytes do hash Keccak-256 da assinatura canônica da função. A EVM lê esses bytes no início do calldata para saber qual função chamar. Digite a assinatura e o seletor aparece aqui.

Como escrevo a assinatura canônica?

Sem espaços, sem nomes de parâmetros e com os tipos completos: transfer(address,uint256), e não transfer(address to, uint256 amount). Na forma canônica uint é uint256, então escreva sempre o tamanho.

Meus dados são enviados para algum servidor?

Não. O Keccak está implementado em JavaScript e roda na própria página, então você pode usar dados de produção sem que eles saiam da sua máquina.

Ferramentas relacionadas

Outros idiomas