About MD4 Hashing
The MD4 (Message Digest Algorithm 4) is a cryptographic hash function developed by Ronald Rivest in 1990. It produces a 128-bit (16-byte) hash value, typically rendered as a 32-character hexadecimal number.
Technical Specifications
- Hash size: 128 bits (32 hex characters)
- Block size: 512 bits
- Rounds: 3 (48 steps)
- Designed: 1990
- Status: Broken, do not use for security purposes
Common Uses (Legacy)
- Older versions of Microsoft Windows NT password hashes
- Some early implementations of NTLM authentication
- Certain file verification systems
- Research and cryptographic study
Security Considerations
MD4 is considered cryptographically broken and unsuitable for further use in security applications:
- Collision attacks can be performed in less than 2 MD4 operations
- First full collision discovered in 1995 (by Hans Dobbertin)
- Preimage attacks are possible with practical complexity
- Superseded by MD5 (also broken) and later by SHA family
Recommended Alternatives
- For passwords: Argon2, bcrypt, PBKDF2, scrypt
- For general hashing: SHA-256, SHA-3, BLAKE2
- For file verification: SHA-256 or SHA-3
Frequently Asked Questions
While MD4 shouldn't be used for security purposes, you might need it for compatibility with legacy systems, research purposes, or understanding historical cryptographic systems.
MD5 is a strengthened version of MD4 with an extra round (64 steps vs MD4's 48) and other modifications. However, both are now considered broken for security purposes.
While MD4 is designed to be irreversible, practical attacks exist that can find collisions and in some cases recover the original input, especially for short or predictable inputs.
Some legacy systems might still use MD4, particularly older Windows NT systems for password hashing. Modern systems should avoid MD4 entirely.
MD4 hashes are 32-character hexadecimal strings. You can compare with known MD4 hashes or use this tool to verify the output matches other MD4 implementations.
Technical Implementation
This tool implements the MD4 algorithm in JavaScript according to the original specification (RFC 1320). The implementation includes:
- Proper padding of input messages
- Processing in 512-bit blocks
- Three rounds of 16 operations each
- Little-endian convention for byte ordering
- Hexadecimal output formatting
Example MD4 Hashes
""
(empty string):31d6cfe0d16ae931b73c59d7e0c089c0
"a"
:bde52cb31de33e46245e05fbdbd6fb24
"abc"
:a448017aaf21d8525fc10ae87aa6729d
"message digest"
:d9130a8164549fe818874806e1c7014b
"12345678901234567890123456789012345678901234567890123456789012345678901234567890"
:e33b4ddc9c38f2199c3e7b164fcc0536