This page's code did not start.

Opening index.html directly from a folder blocks JavaScript modules, so nothing will happen when you choose a file. Serve the folder over http instead:

powershell -ExecutionPolicy Bypass -File serve.ps1

Then open http://localhost:8080/.

Hash & checksum — MD5, SHA-1, SHA-256, SHA-512

Check a download against the number the publisher printed, without sending it to anyone.

Language: English
View source
Your files are processed in your browser. No processing upload.

A checksum is arithmetic over the bytes of your file, and it is done here, in this page, on your own processor. The file is read off your disk four megabytes at a time and each piece is thrown away as soon as it has been counted, so nothing is ever assembled anywhere — not in memory, and certainly not on a server. There is no server on the other end of this page to send a file to even if anything here wanted to.

Live check: checking…

Offline: checking…

Don't take our word for it: open DevTools, watch the Network tab, and check a file. Not one request carries a byte of it, or its name, or its size. Or unplug from the internet and check one anyway.

1 Choose one or more files

Select several files to check a manifest. Each file is read in pieces, one at a time. Choosing again replaces this selection.

2 The checksums

MD5 and SHA-256 are worked out by default, because between them they cover almost every download page there is. Tick another and the file is read again for it — reading is the slow half, so everything ticked before the file is chosen comes out of a single pass over it.

Which checksums to work out

3 Check it against what it should be

Paste the checksum the download page gave you. The shape does not matter — bare hex, the output of sha256sum, a whole SHA256SUMS file, the SHA256 (file) = … form, or the integrity attribute off a script tag. Which algorithm it is follows from how long it is, so there is nothing to pick.

View as Markdown

How to check a download against its checksum

  1. Choose the file. Drop it onto the picker, or select it by hand. It is read straight off your disk in pieces; nothing is sent anywhere while you do it, and there is no size at which the page gives up.
  2. Let it read. MD5 and SHA-256 are worked out by default, in a single pass. The bar shows how far through the file it is and how fast that is going — a large disk image takes about as long as copying it would, because it is the same amount of reading.
  3. Paste what it should be. Whatever the download page gave you, in whatever shape: bare hex, a line of sha256sum output, a whole SHA256SUMS file, or the integrity attribute off a script tag. Which algorithm it is follows from how long it is, and the right box ticks itself.
  4. Read the answer, not the colour. The page says in a sentence whether this is the file that checksum describes. A match means the bytes are identical to the ones the publisher measured. A mismatch means they are not, and the download should be fetched again before it is opened.
  5. Take the checksums if you need them. Copy one, copy all of them, or save them as a small text file in the tagged form the command-line tools write, so the algorithm travels with the number.

The longer version

How to check a download against its checksum How to check an MD5 or SHA-256 checksum on Windows, macOS and Linux or in your browser, what a match actually proves, and the mistake that makes the whole exercise pointless.

Questions

Is my file uploaded anywhere?

No. It is read off your disk by your own browser and hashed on your own processor, four megabytes at a time. There is no server side to this tool, and the page's Content-Security-Policy names every address it may contact — none of them belongs to this site. Unplug from the network and it still works.

Is there a size limit?

No. The file is never held whole: it is read in pieces and each piece is counted and dropped, so a forty-gigabyte disk image uses the same few megabytes of memory as a text file. What it costs is time, and the page tells you how much as it goes.

This is the reason the algorithms are written out here rather than handed to the browser's own crypto.subtle.digest, which would be faster. That call takes the whole message in one buffer and there is no way to feed it a file in pieces, so using it would have put the largest file you can check at the mercy of how much memory this tab happens to be allowed. On a phone that is a few hundred megabytes, and the file people most want to check is a disk image.

The checksum matched. What has that actually proved?

That the bytes on your disk are the bytes somebody measured when they wrote that number down. Nothing more, and it is worth being precise about the limits.

It proves the download was not truncated, corrupted by a bad disk, or swapped for something else in transit. It does not prove the file is safe, because a publisher can measure malware just as accurately as anything else. And it proves very little if the checksum came from the same page, over the same connection, as the file: anybody able to change one was able to change the other. A checksum is worth most when it reaches you by a different route — a signed SHA256SUMS file, a distribution's release announcement, a second mirror, or a package manager that already knows it.

It did not match. What now?

Download it again first, from the same place. An interrupted or resumed transfer is far and away the most common cause, and a second copy usually settles it.

If the second copy gives the same wrong answer, check you are comparing against the right line: release pages list several files, and the checksum for the ARM build will never match the x86 one. Then check the version number. If all of that is right and it still does not match, do not open the file. Fetch it from a different mirror and compare the two checksums with each other.

Which one should I use?

Whichever the publisher printed. The point of the exercise is to compare against their number, and you cannot choose theirs for them.

If you are producing a checksum rather than checking one, use SHA-256. MD5 and SHA-1 are both broken in the sense that matters: two different files with the same digest can be constructed deliberately, in hours on MD5 and at moderate expense on SHA-1. That does not make them useless against accidents — a truncated download will not collide with the original by chance — but it does mean neither can tell you that nobody meddled. SHA-384 and SHA-512 are fine and no better in practice; they are here because some projects publish them.

Why is MD5 here at all if it is broken?

Because it is still what is printed. Mirrors, firmware downloads, university software pages and a great many vendor sites published an MD5 twenty years ago and have not revisited the page since, and a tool that refused to compute one would be refusing to answer the question its visitors actually arrived with.

What it can do instead is say what the answer is worth, which is what the note beside the checkbox does. An MD5 that matches still rules out a corrupted download. It does not rule out a deliberate one.

What formats can I paste into the comparison box?

All of the usual ones, and it works out which is which by itself.

Bare hex, with or without spaces in it. A line of md5sum or sha256sum output, with the filename after it. A whole SHA256SUMS file with forty lines, in which case the line naming your file is the one used. The BSD form, SHA256 (disk.iso) = …. A label in front, as in SHA-256: …. And a subresource-integrity attribute, sha384-…, which is base64 rather than hex and is decoded before it is compared.

Which algorithm it is comes from how long it is: 32 hex characters is an MD5, 40 a SHA-1, 64 a SHA-256, 96 a SHA-384 and 128 a SHA-512. No two are the same length, so there is nothing to choose and nothing to get wrong.

Will it give the same answer as sha256sum or certutil?

Yes, byte for byte. These are exact specifications with published test vectors, and every algorithm here is checked against those vectors and against the operating system's own implementation on every build.

The only difference you will see is presentation. Windows' certutil -hashfile prints in upper case and puts spaces in; this page prints lower case, which is what almost every publisher uses. The comparison ignores both, so a checksum copied out of certutil matches a lower-case one pasted here.

Can I check two files against each other?

Yes, with one extra step: check the first, copy its checksum, then choose the second and paste that checksum into the box. If the two files are identical the page will say so.

That is worth knowing for the case checksums are quietly best at — deciding whether the copy on the backup drive is really the same file as the one on the laptop, when both claim the same size and the same date.

Does it change my file?

No. This tool only reads. There is no output file, no re-encode and nothing written back — the only thing you can download is a small text file listing the checksums. Your original is untouched on your disk, which is also the honest answer to what happens if you close the tab.

Is it free, and do I need an account?

It is free, and there is no account, no sign-in and no trial. There is no limit on file size and no limit on how many files you check. The site carries advertising, which is what pays for it; the ads are not given anything about your file.

Does it work offline?

Yes. Load the page once, then disconnect from the internet and it keeps working. That is also the simplest way to prove nothing is being uploaded: a tool that sent your file away to be hashed would stop the moment you unplugged.