Hex CRC-32 Calculator

Live as you type. Everything runs locally — nothing is sent anywhere.

Batch conversion

Paste one value per line, or comma-separated. Free and unlimited — export straight to CSV.

InputOutput

Results will appear here.

What a checksum is actually protecting against

A checksum is a small, fixed-size value computed from a larger block of data, designed so that even a tiny accidental change to the data — a single flipped bit from a noisy transmission line, a corrupted disk sector, a truncated download — produces a different checksum with very high probability. It's not designed to detect deliberate tampering (that's what cryptographic hashes and signatures are for) or to identify what changed, only whether something changed at all. CRC-32 specifically was designed for exactly this narrow purpose: fast, reliable detection of accidental data corruption in transmission and storage, not security.

Why CRC-32 specifically, and not another checksum

There are many CRC variants (CRC-8, CRC-16, CRC-32, CRC-64, each with several different polynomial and parameter choices), differing mainly in output size and the specific mathematical polynomial used to compute the remainder. CRC-32 with the polynomial 0xEDB88320 (in reversed/reflected form) is by far the most widely deployed variant, used by Ethernet frame checking, gzip and zlib compression, PNG image chunks, and the ZIP file format, among others. This tool implements that specific widely-used variant — sometimes labeled CRC-32/ISO-HDLC — rather than a different CRC-32 parameterization, precisely because it's the one a developer is by far most likely to actually need to reproduce or verify.

Verifying the implementation against the standard check value

CRC algorithms are unusually easy to implement subtly incorrectly — a wrong initial value, a non-reflected polynomial, or a missing final XOR all produce a value that looks like a valid CRC-32 but doesn't match any other implementation. The standard way to confirm a CRC-32 implementation is correct is to check it against the universally cited test vector: the ASCII string "123456789" (hex313233343536373839) must produce exactly 0xCBF43926. Any implementation claiming to be standard CRC-32 that doesn't reproduce this exact value on this exact input has a bug somewhere in its parameters.

How the algorithm works, briefly

CRC-32 treats the input bytes as coefficients of a large binary polynomial and computes the remainder of dividing that polynomial by a fixed generator polynomial, using modulo-2 (XOR-based) arithmetic rather than ordinary arithmetic — this is why the operation is described in terms of a specific polynomial constant rather than a simple sum or hash mixing function. In practice, it's implemented as a bit-by-bit (or byte-by-byte, table-driven) process: XOR each input byte into a running 32-bit register, then shift and conditionally XOR with the polynomial constant eight times per byte, using an initial value of0xFFFFFFFF and a final XOR with 0xFFFFFFFF at the end, both included specifically to detect leading and trailing zero bytes that a naive implementation without them would miss entirely.

Where CRC-32 is used in practice

Ethernet appends a CRC-32 (the "frame check sequence") to every frame so a receiving network card can detect corrupted frames caused by electrical noise or interference and discard them. ZIP archives store a CRC-32 for each compressed file, letting extraction tools verify a file wasn't corrupted during storage or transfer before trusting its contents. PNG images store a CRC-32 for every internal chunk, so a decoder can detect a truncated or corrupted image file rather than silently rendering garbled pixel data. In every one of these cases, the goal is the same: cheap, fast detection of accidental corruption, not security or tamper-proofing.

Input size and performance

This tool computes CRC-32 directly over whatever hex bytes are entered, with no length limit beyond practical browser performance — the algorithm processes one byte at a time regardless of total input size, so runtime scales linearly with the number of bytes. For typical use (checksumming identifiers, short messages, or small file headers pasted as hex) this is effectively instantaneous; extremely large inputs pasted directly as a hex string would take proportionally longer, though this is rarely a practical concern for the kinds of values this tool is meant to check.

What CRC-32 does not protect against

CRC-32 is not cryptographically secure — it's straightforward to construct a different set of bytes that produces the same CRC-32 value deliberately, which makes it unsuitable for verifying that data hasn't been intentionally tampered with, only that it hasn't been accidentally corrupted. Applications that need tamper resistance (verifying a software download hasn't been maliciously modified, for instance) use a cryptographic hash function like SHA-256 instead, which is specifically designed to make constructing a colliding input computationally infeasible. Using CRC-32 for that purpose would give a false sense of security.

FAQ

Which CRC variant does this use?
CRC-32 (IEEE 802.3 / zlib), the variant used by Ethernet, gzip, PNG, and most ZIP tools — polynomial 0xEDB88320, initial value 0xFFFFFFFF, final XOR 0xFFFFFFFF.
How do I verify this is correct?
The standard check value for CRC-32 is the ASCII string "123456789" (hex 313233343536373839), which should produce 0xCBF43926 — you can paste that in to confirm.
Can I checksum a list of values at once?
Yes — use the batch converter below. Paste one hex value per line or comma-separated, and export the results as a CSV file.
g then:h homeb basee encodingc colorp programming