A cyclic redundancy check (CRC) is an error-detecting code designed to detect accidental changes to raw computer data, and is commonly used in digital networks.
A CRC32 algorithm typically takes in a file stream or character array and calculates an unsigned long codeword from the input.
One can transmit this codeword and re-calculate it on the receiver end, then compare it to the transmitted one to detect an error.
Types of CRC
The most commonly used polynomial lengths are:
- CRC-8: 9 bits
- CRC-16: 17 bits
- CRC-32: 33 bits
- CRC-64: 65 bits
Data length and CRC Length
The math is pretty simple. An 8-bit CRC boils all messages down to one of 256 values. If your message is more than a few bytes long, the possibility of multiple messages having the same hash value goes up higher and higher.
A 16-bit CRC, similarly, gives you one of the 65,536 available hash values. What are the odds of any two messages having one of these values?
A 32-bit CRC gives you about 4 billion available hash values.