File Hash Calculator

Drop in a folder full of downloads and walk away with a SHA256SUMS file. Or paste the manifest a project published, drop the matching files on top of it, and read a row per artifact saying matched, mismatched or never supplied.

File hashing and manifest verification workbench

Algorithm
No files queued. Add a few and the digests fill in one row at a time.

How a release team checks a download, and where the browser leaves you stranded

Every serious project publishes two things: the artifact, and a small text file sitting beside it. Ubuntu ships SHA256SUMS next to every ISO. Apache attaches a .sha512 to each release. The Linux kernel archive posts sha256sums.asc. That second file holds one line per artifact, and the line is dull on purpose: a digest, two spaces, a file name.

On a Linux box the check is one command. You put the manifest next to the downloads, run sha256sum -c SHA256SUMS, and the shell prints OK or FAILED beside each name. On Windows you get certutil -hashfile, which handles exactly one file and prints no verdict at all, so you end up comparing 64 characters by eye. On a locked down work laptop you often get neither.

That gap is what this page fills.

The verify mode reads the same manifest formats the command line tools write. Plain digest filename lines from sha256sum and md5sum, the BSD tagged layout SHA256 (file) = digest that the FreeBSD and macOS tools emit, comment lines starting with a hash mark, and the asterisk that GNU tools prepend to a name when the file was read in binary mode. The algorithm comes from the length of the digest on each line, so a manifest mixing SHA-256 and SHA-512 entries verifies correctly without you selecting anything.

A word about what a match proves

A matching digest proves the bytes you hold are the bytes the manifest describes. It says nothing about who wrote the manifest. If the SUMS file came down the same connection, from the same server, as the download itself, then anyone able to swap one was able to swap the other.

Our recommendation: treat an unsigned manifest served alongside the artifact as a corruption check, full stop. Real tamper detection needs the manifest signed with a key you already trust, which is why distributions publish a detached GPG signature over the SUMS file rather than over each ISO.

What runs when you drop a file in

The browser never hands over a file's contents when you pick it. You get a handle: name, size, MIME type, last modified stamp. Reading is a separate, explicit act, and this page reads in pieces.

  1. A slice is requested through Blob.slice, 8 MB at a time, which pulls that range off disk and nothing more.
  2. The slice feeds a running hash state. MD5, SHA-1 and SHA-256 chew through it in 64 byte blocks, keeping four to eight 32 bit registers between calls. CRC-32 walks a 256 entry lookup table byte by byte.
  3. The slice is released and the next one requested. Peak memory stays near 8 MB whether the file is 3 MB or 30 GB.
  4. After the last byte, the state is padded to a block boundary, the total bit length is appended, one final block runs, and the registers are printed as hexadecimal.

No network request happens anywhere in that path. Pull your ethernet cable out and the page behaves identically, which is worth knowing for the files people most want to fingerprint: disk images, database dumps, backup archives, anything that has no business leaving the machine for a fingerprint.

SHA-512 is the one exception, and the reason is a gap in the web platform rather than a design choice here. WebCrypto exposes crypto.subtle.digest, which is fast and native, but it takes the whole input in one call. There is no incremental interface. So SHA-512 loads the file into memory in full before hashing. Keep it under roughly 500 MB, or pick one of the streaming algorithms for anything larger. The tab will run out of memory rather than give you a wrong answer, but a crash halfway through a 4 GB ISO is still a wasted five minutes.

Picking an algorithm when the manifest does not pick for you

In verify mode this question never comes up, since the manifest decides. In hash mode you are producing the manifest, so the choice is yours and it matters more than most people assume.

Digest lengths, real-world habitat, and what each one is worth
AlgorithmHex lengthWhere you meet itOur read on it
CRC-328ZIP entries, PNG chunks, Ethernet frames, firmware imagesError detection, not identity. Random collisions appear once you have roughly 65,000 files, so never use it as a dedup key.
MD532Older mirrors, asset pipelines, legacy databases you inheritedReliable against a bad cable and useless against a person. Collisions run in seconds on a laptop.
SHA-140Git object IDs, older certificate chains, some vendor toolingBroken for collisions since the 2017 SHAttered PDFs. Keep it for compatibility with systems you have no ability to change.
SHA-25664The default for release manifests, container digests, code signingThe one to write when the choice is open. No practical attack, and every platform reads it.
SHA-512128Debian and Apache releases, password hashing schemes, older FIPS workFaster than SHA-256 in native 64 bit code, and memory hungry here. Pick it to match a manifest, not for extra safety.

Longer is not safer past SHA-256 for this task. A 256 bit digest already puts a deliberate collision far outside anything buildable, and the extra 64 characters mostly make manual comparison harder.

One algorithm runs per batch in hash mode. That looks like a limitation and it is a deliberate one: a SUMS file holds a single algorithm, so exporting a valid manifest means committing to one. When you want five digests over the same input side by side, the Hash Generator Suite is built for that shape of question instead.

Four ways a verification goes wrong quietly

A loud failure is fine. You see FAILED, you download again. The bad ones are the checks that look like they passed, or that failed for a reason having nothing to do with the file.

What this page will not do

For the narrower job of fingerprinting one file against one published checksum, the Checksum Validator is a shorter path. This page earns its keep when the count goes above one.

Questions that come up mid verification

The parts of batch hashing that trip people up once files are already on the page.

Why does my terminal print a different SHA-256 for the same file?

For a genuine file it will not. Both read the same bytes and run the same algorithm, so any difference means you hashed something else. The usual causes are a partially finished download, a file the browser sync client replaced while you were working, or a text file whose line endings were rewritten between the two reads. Compare the byte sizes first, since a size difference settles it immediately.

How large a file will this handle?

MD5, SHA-1, SHA-256 and CRC-32 stream in 8 MB slices, so memory stays flat and multi gigabyte images work on a desktop browser. Throughput is bounded by your disk, usually a minute or two per few gigabytes on an SSD. SHA-512 is different because WebCrypto has no incremental interface, so the whole file loads into memory. Stay under about 500 MB there.

Does my file get uploaded?

No. There is no network call in the hashing path at all.

Which manifest formats does verify mode read?

The plain GNU layout that sha256sum and md5sum write, with either two spaces or an asterisk between digest and name. The BSD tagged layout, written as SHA256 (filename) = digest, which the FreeBSD and macOS tools produce. Lines beginning with a hash mark or semicolon are treated as comments. Each line picks its own algorithm from the digest length, so a mixed manifest verifies in one pass.

A row says the file was not supplied, but I picked it. Why?

Names are matched on the base name after the folder path is stripped, and the fallback is case insensitive. A row still shows as not supplied when the name in the manifest differs from the name on disk, which happens when a browser appends a counter such as (1) to a repeated download, or when an archive tool renamed the file on extraction. Rename the file or edit the manifest line, and the row resolves.

Should I still use MD5 anywhere?

Yes, for the boring half of the job. Detecting a corrupted transfer, keying a cache, deduplicating files inside a pipeline you control. Its speed advantage over SHA-256 is small now, so the honest argument for MD5 today is compatibility with a system already storing MD5 values rather than performance.

Why does CRC-32 look nothing like the others?

Because it is not a cryptographic hash. It is a 32 bit remainder from polynomial division, designed to catch burst errors in transmission, and it produces 8 hex characters instead of 32 or 64. Use it to confirm a ZIP entry or a firmware image survived a copy. Never use it to decide two files are the same.