User Rating 0.0 β˜…β˜…β˜…β˜…β˜…
Total Usage 0 times
UTF-8 encoded before hashing
Quick Test Vectors
Hash History

No hashes generated yet.

Is this tool helpful?

Your feedback helps us improve.

β˜… β˜… β˜… β˜… β˜…

About

CRC-32B is the 32-bit Cyclic Redundancy Check defined by the IEEE 802.3 standard, using polynomial 0x04C11DB7 (reflected as 0xEDB88320). It produces an 8-character hexadecimal digest (32 bits) used for error detection in network frames, ZIP archives, PNG chunks, and firmware images. CRC-32B is not cryptographic. It detects accidental corruption but provides zero resistance against intentional tampering. A single flipped bit in a multi-gigabyte file changes the hash entirely, making it effective for integrity verification during transfer. This tool computes the checksum client-side. No data leaves your browser. It processes both raw text (UTF-8 encoded) and binary files. Note: CRC-32B has a collision space of 232 (4,294,967,296 possible values). For datasets exceeding a few billion entries, collision probability rises per the birthday paradox.

crc32b hash generator checksum crc32 hash calculator file checksum integrity check

Formulas

The CRC-32B checksum is computed by treating the input as a polynomial over GF(2) and dividing it by the generator polynomial. The reflected table-driven implementation processes one byte at a time:

crc ← 0xFFFFFFFF

for each byte b in input:
index = (crc βŠ• b) ∧ 0xFF
crc = (crc 8) βŠ• T[index]

result = crc βŠ• 0xFFFFFFFF

Where T is the precomputed 256-entry lookup table. Each table entry T[i] is generated by iterating 8 times over each index i from 0 to 255:

for j = 0 to 7:
if c ∧ 1:
c = 0xEDB88320 βŠ• (c 1)
else:
c = c 1

Where c = current value, b = input byte, T = CRC table, βŠ• = bitwise XOR, ≫≫≫ = unsigned right shift, 0xEDB88320 = reflected polynomial of the IEEE 802.3 standard CRC-32.

Reference Data

AlgorithmPolynomial (Normal)Polynomial (Reflected)Output BitsHex DigitsCommon Use
CRC-32B (IEEE 802.3)0x04C11DB70xEDB88320328Ethernet, ZIP, PNG, gzip
CRC-32C (Castagnoli)0x1EDC6F410x82F63B78328iSCSI, Btrfs, ext4
CRC-16-CCITT0x10210x8408164HDLC, Bluetooth, SD cards
CRC-16-IBM0x80050xA001164Modbus, USB
CRC-80x070xE082ATM HEC, IΒ²C
CRC-64-ECMA0x42F0E1EBA9EA3693 - 6416HDFS, XZ Utils
Adler-32N/A (sum-based)N/A328zlib
MD5N/A (Merkle - DamgΓ₯rd)N/A12832Legacy checksums (broken crypto)
SHA-1N/A (Merkle - DamgΓ₯rd)N/A16040Git objects (deprecated crypto)
SHA-256N/A (Merkle - DamgΓ₯rd)N/A25664TLS, Bitcoin, file integrity
CRC-32/MPEG-20x04C11DB7 - 328MPEG-2 transport streams
CRC-32/BZIP20x04C11DB7 - 328bzip2 file format
CRC-32/JAMCRC0x04C11DB70xEDB88320328No final XOR variant
CRC-32/XFER0x000000AF - 328XFER protocol

Frequently Asked Questions

In most contexts they are identical. The "B" suffix originates from PHP's hash() function to distinguish the IEEE 802.3 variant (polynomial 0x04C11DB7) from the rarely used CRC-32 variant. CRC-32B matches the checksum used in ZIP, gzip, PNG, and Ethernet. When someone says "CRC-32" without qualification, they almost always mean CRC-32B.
CRC-32B guarantees detection of any single-bit error, any two-bit error, any odd number of bit errors, and any burst error of 32 bits or fewer. For random errors longer than 32 bits, the probability of an undetected error is approximately 1 in 232 (2.33 Γ— 10βˆ’10). It cannot detect intentional (adversarial) modifications because constructing a collision is trivial in constant time.
CRC-32B is a linear function over GF(2). Given any hash value, an attacker can compute a matching input in O(1) time by solving a system of linear equations. It provides zero preimage resistance, zero collision resistance, and zero avalanche guarantees beyond error detection. Use SHA-256 or bcrypt/argon2 for security-sensitive applications.
For text input, no, because UTF-8 encoding produces a fixed byte sequence regardless of platform endianness. For binary files, the CRC is computed over the raw byte stream as stored on disk, so the result is consistent. However, if you serialize multi-byte integers into a buffer manually, you must ensure consistent byte order (typically little-endian for x86) before hashing.
All text is encoded to UTF-8 using the TextEncoder API before hashing. A character like "Γ©" becomes 2 bytes (0xC3 0xA9), and an emoji like "πŸ˜€" becomes 4 bytes. The CRC-32B is computed over the resulting byte sequence, matching the behavior of PHP's hash('crc32b', $string) and Python's binascii.crc32().
The string "123456789" (9 ASCII bytes) produces CRC-32B cbf43926. An empty input produces 00000000. The single character "a" produces e8b7be43. These are standard test vectors used to verify CRC-32 implementations against the IEEE 802.3 specification.