Generador de Hash Keccak-256

Calcula hashes Keccak para Ethereum, además de selectores de función y topics de eventos. Todo se procesa en tu 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

Qué hace esta herramienta

Escribe o pega una entrada y obtienes el hash al instante, sin pulsar nada. El algoritmo Keccak está implementado en la propia página, así que no hay ninguna petición al servidor.

  • Cuatro variantes — Keccak-256, 512, 224 y 384, calculadas a la vez.
  • Tres codificaciones de entrada — UTF-8, hexadecimal o Base64, según cómo tengas el dato.
  • Comparación con SHA-256 — se muestra al lado para que veas que no coinciden.
  • Selector y topic — a partir de una firma de función obtienes el selector de 4 bytes y el topic de evento de 32 bytes.
  • Archivos — puedes cargar un archivo y calcular su hash sin subirlo a ningún sitio.

Keccak-256 no es SHA3-256

Es la trampa que hace perder más horas en Ethereum. Ambos usan la construcción esponja de Keccak, pero el NIST cambió el byte de relleno al estandarizar SHA-3: 0x01 en el Keccak original, 0x06 en SHA-3. Ethereum ya había adoptado el primero.

Consecuencia práctica: si calculas un hash con una librería que expone sha3_256 y lo comparas con lo que devuelve keccak256() en Solidity, no van a coincidir nunca. En Python, hashlib.sha3_256 no sirve; necesitas eth_hash o pysha3.keccak_256.

Selector de función y topic de evento

El selector son los primeros 4 bytes del Keccak-256 de la firma canónica. El topic de un evento son los 32 bytes completos:

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

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

Cuidado con la firma canónica: sin espacios, sin nombres de parámetros y con el tamaño explícito. uint se escribe uint256; si lo omites, el selector sale distinto y la llamada revierte.

Dónde aparece Keccak-256 en Ethereum

  • Direcciones — los últimos 20 bytes del Keccak-256 de la clave pública.
  • Slots de storage — la posición de una entrada de mapping se calcula hasheando la clave junto al número de slot.
  • Logs — el primer topic de un evento no anónimo es el hash de su firma.
  • EIP-712 — el hash del dominio y de la estructura, para firmas de datos legibles.
  • CREATE2 — la dirección resultante depende del Keccak-256 del bytecode de inicialización.

Preguntas frecuentes

¿Keccak-256 es lo mismo que SHA3-256?

No, y confundirlos es el error más común. Ethereum adoptó Keccak antes de que el NIST cerrara el estándar SHA-3, y el NIST cambió el relleno de 0x01 a 0x06. El resultado: para la misma entrada, keccak256() de Solidity y SHA3-256 devuelven hashes distintos. Esta herramienta implementa el Keccak original que usa Ethereum.

¿Qué es el selector de función?

Los primeros 4 bytes del hash Keccak-256 de la firma canónica de la función. La EVM los lee al principio del calldata para saber qué función invocar. Escribe la firma y aquí verás el selector.

¿Cómo escribo la firma canónica?

Sin espacios, sin nombres de parámetros y con los tipos completos: transfer(address,uint256), no transfer(address to, uint256 amount). uint es uint256 en la forma canónica, así que escribe siempre el tamaño.

¿Se envían mis datos a algún servidor?

No. El Keccak está implementado en JavaScript y se ejecuta en la página, así que puedes usarlo con datos de producción sin que salgan de tu equipo.

Herramientas relacionadas

Otros idiomas