SHA-3 / Keccak Generator
See the SHA-3 and Keccak digests of the same bytes side by side — including Ethereum keccak256, computed entirely on this device.
This page hashes pasted input only — to hash a file, use the File Checksum Verifier.
Both digests appear here as you type.
A leading 0x is ignored. Character positions in any error below count from the first hex digit after it.
Press ? for shortcuts
Do it offline:$ printf '%s' 'hello' | openssl dgst -sha3-256
How to use it
- Paste or type the input. Both families hash the very same bytes, and both rows update without a submit button.
- Set the width once: the SHA3 row and the Keccak row always share it, so you are comparing like with like.
- Say how the box should be read — UTF-8 text, hex or Base64. Nothing switches interpretation on your behalf.
- Copy the row you need — the case and 0x toggles change what lands on the clipboard. Paste a published digest into the compare field for a verdict.
Two digests of the same bytes, side by side: the FIPS 202 standard SHA3-256 and the original Keccak-256 that Ethereum's keccak256 means. Pick a width — 224, 256, 384 or 512 — paste text, hex or Base64, and both rows fill in as you type, with an 0x toggle for the Ethereum convention. Both digests are computed in this browser tab, so the bytes you paste never leave it.
Examples
helloSHA3-256: 3338be694f50c5f338814986cdf0686453a888b84f424d792af4b9202398f392
Keccak-256: 1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8Five bytes in, 32 bytes out of each function — 64 hex characters apiece, diverging from the very first digit. Same width, same input, two different answers: that is why this page shows a pair rather than a row.
SHA3-256: a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
Keccak-256: c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470Zero bytes is a legal input, and its Keccak-256 value is worth memorising: c5d24601… is the constant Ethereum clients carry for the hash of empty data. Seeing a7ffc6f8… instead means something handed you real SHA-3.
68656c6c6fSHA3-256: 3338be694f50c5f338814986cdf0686453a888b84f424d792af4b9202398f392
Keccak-256: 1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8Read as hex, those ten characters are the five bytes of example 1, so both rows repeat it. Pick the wrong interpretation and you hash the spelling instead of the bytes — a mismatch that looks like an algorithm fault and never is.
Transfer(address,address,uint256)Keccak-256: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efThe ERC-20 Transfer event signature, hashed the way the EVM does it: the topic0 you filter logs on, and with the prefix toggle on it reads 0xddf252ad… ready to paste. The SHA3-256 row for the same string is c17a9d92… — wrong chain.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
One byte separates the two families
The two families share the permutation, the state and the output width. The only difference is the domain byte absorbed right after your message: 0x06 for SHA-3, 0x01 for Keccak. At 256 bits the sponge takes in 136 bytes per permutation, so that byte changes every round after it.
Equal length, never an equal value
Both rows run 64 hex characters at 256 bits and 128 at 512, and a digest alone never says which family made it. Length narrows the candidates; only rehashing the input settles it.
0x is stripped when you compare, literal when you hash
Paste a 0x-prefixed value into the compare field and the prefix goes before the verdict, with a note warning that any position reported counts from the first hex digit. In the input pane those two characters are ordinary text: 0xdeadbeef typed there is ten characters, not four bytes.
There is no everyday openssl for Keccak
openssl dgst -sha3-256 needs OpenSSL 3.x; the LibreSSL 3.3.6 macOS ships lists nothing past sha512. For the Ethereum flavour no mainstream openssl spelling exists, so the command below covers SHA-3 and Keccak is your library's job.
A sponge, so no length-extension trick
SHA-256 and SHA-512 publish their whole internal state as the digest, which is what lets a message be extended without knowing it. Keccak keeps a capacity of twice the output width hidden, so both families here are immune to that move.
Text up to 1 MB; binary arrives as hex or Base64
Past 1 MB this page declines outright instead of hashing a prefix and printing a plausible wrong answer. NUL bytes and arbitrary binary reach it through the hex and Base64 interpretations; whole files belong to the File Checksum Verifier.
Common errors
`T` at position 1 is not a hex digit- A function or event signature was pasted while the interpretation was still hex, and hex reads only 0–9 and a–f in pairs. Signatures are hashed as text — switch back and the topic0 appears.
This doesn't look like a Keccak-256 digest (unexpected length 40) — a Keccak-256 digest is exactly 64 hex characters.- 40 hex digits after the 0x is an Ethereum address, not a digest: addresses are the last 20 bytes of a Keccak-256 hash, so no output here can equal one. Paste the 32-byte value you meant to check.
Expected digest: `x` at position 2 is not a hex digit- One leading 0x is removed for you, so a doubled 0x0x… leaves an x in the hex. Positions count from the first character after the stripped prefix, which is why this reads 2 rather than 4.
FAQ
My library's sha3() disagrees with this page — which is right?
Both, for different functions. In web3.js, utils.sha3 is an alias of utils.keccak256 and returns the Keccak row; ethers' id() does the same. Python splits them cleanly: hashlib.sha3_256 is the standard, PyCryptodome's Crypto.Hash.keccak the Ethereum one.
Where exactly did FIPS 202 change Keccak?
Only in domain separation. NIST left the permutation and the rate-capacity split alone and appended two bits to the message before padding, turning the 2011 submission's 0x01 byte into 0x06. Ethereum's Frontier launch preceded the August 2015 standard, so keccak256 kept the older byte.
Is SHA3-256 stronger than SHA-256?
Not in the numbers that matter: both target 128-bit collision resistance and neither has a published break. SHA-3 is a different construction rather than a stronger one — insurance against a future SHA-2 result, and slower in software.
Keyboard shortcuts
- ⌘/Ctrl + Enter
- Hash the current input again now.
- ⌘/Ctrl + S
- Download the selected family's digest as .txt.
- ⌘/Ctrl + C
- With nothing selected, copy the selected family's digest exactly as displayed.
- ⌘/Ctrl + Shift + C
- Copy that digest even when a selection exists.
- t
- Cycle the theme.
- ? or ⌘/Ctrl + /
- Open the shortcut help.
- Esc
- Dismiss the overlay on top.