CRC-32 Hash Generator
Generate CRC-32 checksums from text or files instantly. Uses ISO 3309 polynomial for accurate 32-bit cyclic redundancy checks.
About
CRC-32 produces a 32-bit checksum (8 hexadecimal characters) used to detect accidental corruption in data during storage or transmission. It does not provide cryptographic security. A single flipped bit in a multi-gigabyte file changes the resulting CRC value entirely, making it effective for integrity verification in protocols like Ethernet (IEEE 802.3), PNG, ZIP, and GZIP. The algorithm uses polynomial division over GF(2) with the generator polynomial G(x) = 0xEDB88320 in reflected (LSB-first) form. This tool computes the checksum per ISO 3309 / ITU-T V.42 specification. Note: CRC-32 is not collision-resistant. Approximately 1 in 4.29 Γ 109 chance of two random inputs sharing the same hash. Do not use it for password hashing or digital signatures.
Formulas
CRC-32 computes the remainder of polynomial division over GF(2). The reflected table-driven algorithm processes one byte at a time:
for each byte b in input:
index = (crc β b) β§ 0xFF
crc = T[index] β (crc >>> 8)
result = crc β 0xFFFFFFFF
The lookup table T[256] is precomputed from the reflected polynomial P = 0xEDB88320:
c β i
for j = 0 to 7:
c = (c β§ 1) ? (P β (c >>> 1)) : (c >>> 1)
T[i] = c
Where crc is the running checksum register, b is the current input byte, T is the 256-entry lookup table, P = 0xEDB88320 is the reflected polynomial of the standard CRC-32 generator 0x04C11DB7, β denotes bitwise XOR, and >>> denotes unsigned right shift. The initial value and final XOR mask are both 0xFFFFFFFF per ISO 3309.
Reference Data
| Protocol / Format | CRC Variant | Polynomial (Hex) | Width | Init Value | XOR Out | Reflect |
|---|---|---|---|---|---|---|
| Ethernet (IEEE 802.3) | CRC-32 | 0x04C11DB7 | 32 bits | 0xFFFFFFFF | 0xFFFFFFFF | Yes |
| ZIP / GZIP | CRC-32 | 0x04C11DB7 | 32 bits | 0xFFFFFFFF | 0xFFFFFFFF | Yes |
| PNG | CRC-32 | 0x04C11DB7 | 32 bits | 0xFFFFFFFF | 0xFFFFFFFF | Yes |
| MPEG-2 | CRC-32/MPEG-2 | 0x04C11DB7 | 32 bits | 0xFFFFFFFF | 0x00000000 | No |
| BZIP2 | CRC-32/BZIP2 | 0x04C11DB7 | 32 bits | 0xFFFFFFFF | 0xFFFFFFFF | No |
| Castagnoli (iSCSI) | CRC-32C | 0x1EDC6F41 | 32 bits | 0xFFFFFFFF | 0xFFFFFFFF | Yes |
| POSIX cksum | CRC-32/POSIX | 0x04C11DB7 | 32 bits | 0x00000000 | 0xFFFFFFFF | No |
| JAMCRC | CRC-32/JAMCRC | 0x04C11DB7 | 32 bits | 0xFFFFFFFF | 0x00000000 | Yes |
| XFER | CRC-32/XFER | 0x000000AF | 32 bits | 0x00000000 | 0x00000000 | No |
| CRC-16 (Modbus) | CRC-16 | 0x8005 | 16 bits | 0xFFFF | 0x0000 | Yes |
| CRC-8 (Dallas/Maxim) | CRC-8 | 0x31 | 8 bits | 0x00 | 0x00 | Yes |
| CRC-64 (ECMA-182) | CRC-64 | 0x42F0E1EBA9EA3693 | 64 bits | 0x0000000000000000 | 0x0000000000000000 | No |
| Known Test Vector | CRC-32 of "123456789" | 0xCBF43926 | ||||
| Empty Input | CRC-32 of "" | 0x00000000 | ||||