A classic test vector
Input
abc
Result
900150983cd24fb0d6963f7d28e17f72
Published in RFC 1321, so it verifies that any MD5 implementation, including this one, behaves correctly.
Generate an MD5 hash for non-security-critical comparison and legacy tooling.
0d9d85878968bc9a9edb299dab1e80cc
Understand the format
MD5 produces a 128-bit digest quickly and is still common in legacy systems, but it has been cryptographically broken for two decades and must not protect anything.
MD5 was designed in 1991 and produces a 128-bit digest. Collision attacks were published in 2004, and by 2008 researchers used a chosen-prefix collision to forge a certificate authority certificate. In 2012 the Flame malware exploited an MD5 weakness to fake a Microsoft code-signing signature. Producing two different inputs with the same MD5 digest is now cheap enough to do on a laptop.
What that means in practice: MD5 can no longer prove that content came from a particular source or that a file has not been deliberately substituted. An attacker able to influence the content can prepare two versions with identical digests.
MD5 remains adequate for detecting accidental corruption and for non-adversarial bucketing: cache keys, deduplication of files you control, sharding, and ETag-style change detection. In those cases the threat model contains no attacker, only bit rot and truncated transfers.
It also survives in legacy interfaces. Older payment gateways, telecom feeds, and content-delivery integrations still publish MD5 checksums, and a migration project frequently needs to reproduce those exact values to prove parity between the old and new systems.
Step by step
The MD5 implementation runs entirely in the page, so legacy values and internal strings can be checked without transmitting them.
Worked examples
Input
abc
Result
900150983cd24fb0d6963f7d28e17f72
Published in RFC 1321, so it verifies that any MD5 implementation, including this one, behaves correctly.
Input
abc vs abd
Result
900150983cd24fb0d6963f7d28e17f72 vs 4911e516e5aa21d327512e0c8b197616
One changed letter produces an entirely unrelated digest, which is why MD5 is still fine for spotting accidental corruption.
Reference
| Purpose | Appropriate choice | Reason |
|---|---|---|
| Detecting accidental corruption | MD5 or CRC32 | No attacker involved; speed matters more than strength. |
| Verifying a download from the internet | SHA-256 | A published checksum must resist deliberate substitution. |
| Signing or certificate use | SHA-256 or SHA-3 | MD5 and SHA-1 both allow forged signatures. |
| Storing passwords | Argon2id, scrypt, or bcrypt | General-purpose hashes are far too fast to resist guessing. |
| Matching a legacy system | MD5, documented as legacy | Parity testing during a migration is a valid reason. |
Practical Guide
Troubleshooting
FAQ
No. It is a one-way hash function. There is no key and no decryption; identical inputs simply produce identical digests.
It is fast, universally implemented, and adequate whenever the only adversary is a flaky network. The problem is that its use is rarely reviewed when a system moves into a security-relevant role.
Not mathematically, but short and common inputs are trivially recovered from precomputed tables. Treat any MD5 of a low-entropy value as public.
No. A salt defeats precomputed tables but not fast brute force. Billions of salted MD5 candidates can be tested per second on a single GPU.
Yes. This page encodes text as UTF-8 before hashing. A system that uses Latin-1 or UTF-16 will report a different digest for the same visible characters.
Go deeper