CRC-32C (Castagnoli) Checksum

Compute CRC-32C for iSCSI, SCTP, and NVMe integrity checks

Calculate CRC-32C using the Castagnoli polynomial (0x1EDC6F41) used by iSCSI, SCTP, ext4, Btrfs, and hardware-accelerated storage. Enter text or hex bytes and read the result in hex and decimal in your browser. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

How is CRC-32C different from regular CRC-32?

They use different generator polynomials. Standard CRC-32 (used by zlib, PNG, and Ethernet) uses 0x04C11DB7, while CRC-32C uses the Castagnoli polynomial 0x1EDC6F41. The polynomials produce completely different checksums for the same data.

What CRC-32C is

CRC-32C is a 32-bit cyclic redundancy check based on the Castagnoli polynomial, chosen for storage and network protocols because it has strong error-detection properties and can be computed in hardware.

How it works

The CRC register is initialised to 0xFFFFFFFF. Each input byte is XORed into the low byte of the register, then the register is shifted right eight times; each time a 1 bit is shifted out, the reflected polynomial 0x82F63B78 (the bit-reversal of 0x1EDC6F41) is XORed back in. After the final byte, the register is XORed with 0xFFFFFFFF to produce the result. Because both input and output are reflected, the whole computation runs least-significant-bit first.

This calculator precomputes a 256-entry table from the polynomial and folds one byte at a time through it — the same byte-slicing approach the Linux kernel and Intel’s CRC libraries use.

Why Castagnoli instead of the original CRC-32 polynomial?

When engineers designed iSCSI and SCTP in the early 2000s, they evaluated dozens of polynomials against theoretical error-detection benchmarks. The Castagnoli polynomial (0x1EDC6F41) was found to offer better Hamming distance properties than the original CRC-32 (0x04C11DB7) for most packet sizes used in storage and networking. Better Hamming distance means more error patterns are caught — specifically, it can detect all burst errors of up to 32 bits, all odd numbers of errors, and all two-bit errors up to a larger data length than the original polynomial.

The practical tipping point came when Intel added a dedicated CRC32 instruction to SSE 4.2 (circa 2008) that computes the Castagnoli variant in hardware. A single instruction processing one byte takes one clock cycle; with unrolled loops slicing eight bytes at a time, a modern CPU can checksum data at multi-gigabit throughput. This is why CRC-32C became the natural choice for NVMe, storage drivers, and high-speed network stacks.

Where CRC-32C is used

  • iSCSI (RFC 3720) — mandatory integrity check on the protocol data unit header and optionally on the data digest.
  • SCTP (RFC 4960) — replaces the earlier weaker checksum that was based on the Adler-32/CRC-32 family; CRC-32C is mandatory.
  • ext4 — filesystem journal and block group checksums.
  • Btrfs — per-block checksums for data and metadata.
  • RocksDB and LevelDB — SSTable block checksums.
  • Google Cloud Spanner and Cloud Storage — used to verify data integrity in transit.

CRC-32C vs. CRC-32 — quick comparison

PropertyCRC-32 (zlib)CRC-32C (Castagnoli)
Polynomial0x04C11DB70x1EDC6F41
Check value (123456789)0xCBF439260xE3069283
Hardware instructionNo dedicated oneSSE 4.2 CRC32
Primary useZIP, gzip, PNG, EthernetiSCSI, SCTP, ext4, Btrfs

Example and notes

The standard test vector 123456789 yields 0xE3069283; matching this value is the quickest way to confirm a CRC-32C implementation. Switch to Hex bytes to checksum binary data such as a disk block or a network segment payload.

Do not confuse CRC-32C with the more common CRC-32 used by zlib, gzip, and PNG — they share the name “CRC-32” but use different polynomials and will never agree on the same input. CRC-32C protects only against accidental corruption and is not a security primitive. Everything is computed locally in your browser.