MD5 Generator
Generate a 128-bit MD5 digest — 32 hexadecimal characters. Useful for matching legacy checksums and detecting accidental corruption; not suitable for anything security-sensitive.
{{ textCount }}
{{ textError }}
{{ r.value }}
{{ legacyNames }} {{ legacyNames.indexOf(' and ') === -1 ? 'is' : 'are' }} selected. Practical collisions are public for both, so treat the result as a checksum for spotting accidental corruption — not as evidence that a file is authentic.
Drop files here to hash them
Up to 100 files · any size · read in 4 MB chunks, never uploaded
Files are read, not uploaded. Each one is streamed through the hash function in chunks straight from disk, so a multi-gigabyte image never lands in memory and never leaves your device.
{{ f.error }}
{{ r.value }}
The key never leaves this page. It is not sent to a server, not saved to local storage, and not written into the exported files.
{{ hmacError }}
{{ hmacResult }}
HMAC is not a hash with the key glued on the front. It runs the key through the hash
twice with two different pads, which is what makes it resistant to the length-extension
attacks that break a naïve hash(key + message).
Drop the file you want to check
Hashed in your browser · never uploaded
{{ lengthProblem || vError }}
Hash matches
The {{ vResult.label }} digest of {{ vFile.name }} is identical to the hash you supplied, so this is the file that checksum describes. Letter case and surrounding whitespace were ignored.
Both {{ vResult.computed }}
Hash does not match
This file is not the one that checksum describes. Either the download is incomplete or corrupted, or the file has been altered. Downloading it again is the first thing to try.
Computed {{ vResult.cHead }}{{ vResult.cChar }}{{ vResult.cTail }}
Expected {{ vResult.eHead }}{{ vResult.eChar }}{{ vResult.eTail }}
First difference at character {{ vResult.diffAt + 1 }}.
Paste a hash into both boxes to compare them.
Hashes match
Both are the same {{ cmpResult.len }}-character value, so they identify identical content.
Ignored while comparing: letter case, spaces, line breaks, and any
sha256:-style prefix.
Both {{ cmpResult.a }}
Length {{ cmpResult.len }} — consistent with {{ cmpResult.guess }}.
Hashes are different
These are different lengths — {{ cmpResult.a.length }} and {{ cmpResult.b.length }} characters — so they are digests from two different algorithms, and comparing them tells you nothing about the content.
These two digests differ, so they describe different content.
Hash A {{ cmpResult.aHead }}{{ cmpResult.aChar }}{{ cmpResult.aTail }}
Hash B {{ cmpResult.bHead }}{{ cmpResult.bChar }}{{ cmpResult.bTail }}
First difference at character {{ cmpResult.diffAt + 1 }}.
Text, files and secret keys are hashed in your browser. Nothing you enter is ever uploaded to a server.
About MD5
MD5 produces 128 bits, written as 32 hexadecimal characters. Ron Rivest designed it in 1991 and for a decade it was the default choice for checksums and even for password storage. It is now comprehensively broken for anything an adversary could touch.
What broke, and what did not
In 2004 researchers demonstrated practical collisions: two different inputs with the same MD5. By 2008 a team had used the technique to forge a certificate authority signature. That means an MD5 match is not evidence that a file is the one you wanted — someone able to influence the content can produce a different file with the same digest. What has not been broken is preimage resistance: given only a digest, recovering the input is still infeasible.
Where MD5 is still reasonable
Detecting accidental corruption in transit, deduplicating files you control, cache keys, and verifying checksums that were published as MD5 and cannot be reissued. In all of those the threat is a flipped bit, not an attacker. It is also fast, which is occasionally the point.
MD5 and passwords
Consumer hardware tests billions of MD5 candidates per second, so an MD5 password database is effectively plaintext for any common password. Salting slows a bulk attack but does not fix the speed. Use Argon2id, bcrypt, scrypt or PBKDF2 instead.
See also the SHA-256 generator.
Frequently asked questions
What does MD5 produce?
128 bits, written as 32 hexadecimal characters, for any input from an empty string to a multi-gigabyte file.
Is MD5 safe to use?
Not for security. Producing two different files with the same MD5 has been practical since 2004, so an MD5 match is not evidence that a file is authentic. It is still fine for spotting accidental corruption, and for matching checksums that were published as MD5.
So what is MD5 still good for?
Cache keys, deduplication, detecting a truncated transfer, and verifying legacy checksums where you have no choice. Anywhere an adversary might be involved, use SHA-256.
Can MD5 be reversed?
No. It is one-way and lossy. Services claiming to crack MD5 are looking the value up in tables of pre-computed hashes of common inputs — which is exactly why MD5 must never be used to store passwords.
Why do I get a different hash than another tool?
Almost always the input differs: a trailing newline, a different text encoding, or trailing whitespace. Check the byte count shown under the input box against what you expect.