When to use this
Only where a legacy system demands MD5: old checksum files, an ETag scheme you cannot change, cache keys in an existing format.
This page is a focused view of theHash Generator (SHA-256 / MD5), which has the full set of options.
MD5 produces a fixed 128-bit digest — 16 bytes, 32 hex characters. Web Crypto deliberately omits it (the API ships only algorithms considered secure), so this page uses the js-md5 library — still entirely in your browser. MD5 has been broken for collision resistance since 2004: use it to match legacy checksums, never for security.
The break is not theoretical: crafting two different inputs with the same MD5 digest takes under a second on ordinary hardware, and chosen-prefix collisions — two meaningful colliding documents — are within hobbyist budgets. What still holds is second-preimage resistance: nobody can produce a file matching your existing file's MD5, which is exactly why MD5 remains serviceable for detecting accidental corruption and nothing more. The empty string's digest, d41d8cd9…ecf8427e, is worth recognizing in logs: it means something hashed nothing.
If an MD5 does not match the published value, check the byte-level suspects first (trailing newline, CRLF, BOM), and count characters: a 40-hex value against your 32-hex output means the source published SHA-1, not MD5. If you are choosing an algorithm rather than matching one, stop here and use SHA-256 — same tool, one row up.
Only where a legacy system demands MD5: old checksum files, an ETag scheme you cannot change, cache keys in an existing format.
This page is a focused view of theHash Generator (SHA-256 / MD5), which has the full set of options.
For non-adversarial jobs, yes — detecting accidental corruption or keying a cache is fine. It is unsafe wherever an attacker benefits from crafting two inputs with the same hash: signatures, certificates, password storage.
The Web Crypto API only ships algorithms considered secure; MD5 and SHA-1 checksum use cases are left to libraries. That is why this page uses js-md5 while SHA-256 uses crypto.subtle.
Not by reversing it, but common short inputs are trivially found in precomputed lookup tables — another reason never to “hash” secrets with bare MD5.