What is Whirlpool?
Whirlpool is a 512-bit hash function designed in 2000 by Vincent Rijmen and Paulo Barreto and standardized in ISO/IEC 10118-3. It was a credible, public, non-US design at a time when SHA-2 was young, chosen by several European and government procurement teams for its strong 512-bit output and block-cipher pedigree.
The AES-based construction
Whirlpool builds a dedicated block cipher (W) from AES components — the AES S-box, a 512-bit state (8×8 bytes), and a diffusion layer equivalent to AES's MixColumns — then feeds that cipher through the Miyaguchi–Preneel compression scheme. Each 512-bit message block encrypts the previous chaining value, and the result is XORed back in a way that gives security against fixed-point attacks. It is a clean, conservative design; its weakness has always been sheer speed.
Security status
No successful attack against the full Whirlpool has been published. Its 512-bit output offers
256-bit collision resistance by the birthday bound — far beyond any attainable computation — and
it has held up through years of cryptanalytic attention from the AES research community. Its
decline is not a security story, but an ecosystem one:
openssl dgst -whirlpool still runs, but most modern stacks standardized on SHA-2/SHA-3.
When Whirlpool is still used
- Regulatory / procurement inertia — ISO-mandated legacy architectures where replacing the hash means relicensing systems.
- Compatibility — verifying an existing Whirlpool checksum or emitting one that downstream tooling expects.
- Vendor ecosystems — forensic, storage, and some enterprise suites that shipped Whirlpool in the 2000s and kept it.
For everything new, SHA-256 and SHA-3 give the same or better assurance with far better tooling.
How this tool works
Whirlpool is not exposed by the Web Crypto API, so this page uses the hash-wasm
WebAssembly build. The WASM module is fetched once and reused for every digest, so post-first-use
hashing is effectively instant. Input is decoded on-device (UTF-8, hex, or Base64), hashed
locally, and never transmitted.
Worked examples you can verify right now
| Input | Whirlpool digest |
|---|---|
(empty string) | 19fa61d75522a4669b44e39c1d2e1726c530232130d407f89afee0964997f7a73e83be698b288febcf88e3e03c4f0757ea8964e59b63d93708b138cc42a66eb3 |
hello world | 8d8309ca6af848095bcabaf9a53b1b6ce7f594c1434fd6e5177e7e5c20e76cd30936d8606e7f36acbef8978fea008e6400a975d51abe6ba4923178c7cf90c802 |
Paste the exact bytes of any row into this tool and you will get precisely these 128-character digests.