Algorithms

MD4

MD5's older sibling from 1990. Broken since 1996 and still inside NTLM and ed2k links. Here for those and it has HMAC
IDmd422 / 38MD · 128-bit
Hash / Legacy

MD4

MD5's older sibling, broken before MD5 was.

Digest
128-bit · 16 bytes
HMAC
takes a key
Security
BROKEN: practical collisions since 1996
Family
3 in MD
4 options, 0 required

Sample

hex
aa010fbc1d14c795d86ef98c95479d17
base64
qgEPvB0Ux5XYbvmMlUedFw==

Options

encodingstring
default hex
Output encoding: hex, base64, base64url, binary
keystring
optional
HMAC key; enables HMAC mode
roundsnumber
default 1
How many times to hash, each round hashing the previous digest
chainstring
default bytes
What each round after the first hashes: bytes of the digest, or its lowercase hex

Access

Createcreate("md4")
CLIhashes md4 'hello world'
Tryplayground with the sample above
Kinmd5, ntlm

Rivest's hash from 1990, three rounds of sixteen steps. MD5 came a year later with a fourth round, because MD4 already looked thin. It was. Dobbertin found a full collision in 1996, and today one takes less work than you'd spend reading this page.

ts
create("md4").hash("abc").digest; // "a448017aaf21d8525fc10ae87aa6729d"
create("md4").hash("").digest; // "31d6cfe0d16ae931b73c59d7e0c089c0"

Then why is it here? Because it never left. Windows keeps every password as MD4 of its UTF-16LE bytes, the NT hash. eDonkey links name files by MD4 of their chunks. OpenSSL 3 moved it to the legacy provider, so Node won't compute it without a flag.

That empty-input digest, 31d6cfe0…, is worth remembering. Spot it in a Windows dump and you're looking at an account with no password.