Qu'est-ce qu'une somme de contrôle CRC ?
Le contrôle de redondance cyclique (CRC, pour Cyclic Redundancy Check) est un code détecteur d'erreurs très répandu dans les réseaux, le stockage et de nombreux formats de fichiers (Ethernet, ZIP, PNG, Modbus, USB, etc.). Le principe : vos données sont considérées comme un grand nombre binaire, que l'on divise par un polynôme générateur fixe à l'aide d'une arithmétique binaire sans retenue (GF(2), où l'addition et la soustraction se résument toutes deux à un XOR). Le reste de cette division constitue le CRC. Si ne serait-ce qu'un seul bit du message change, le reste change presque toujours lui aussi : c'est précisément ce qui rend le CRC redoutablement efficace pour repérer les erreurs de transmission ou de stockage.
Comment utiliser ce calculateur
Saisissez le texte ASCII de votre choix dans le champ prévu, sélectionnez la variante de CRC souhaitée, puis lisez le résultat. L'outil affiche la somme de contrôle à la fois en hexadécimal et en décimal, ainsi que la largeur en bits et le nombre d'octets traités. Trois variantes courantes sont prises en charge :
CRC-8 — polynôme \(\mathtt{0x07}\), valeur initiale \(\mathtt{0x00}\).
CRC-16/CCITT-FALSE — polynôme \(\mathtt{0x1021}\), valeur initiale \(\mathtt{0xFFFF}\), sans réflexion.
CRC-32 (IEEE 802.3) — polynôme réfléchi \(\mathtt{0xEDB88320}\), valeur initiale \(\mathtt{0xFFFFFFFF}\), XOR final \(\mathtt{0xFFFFFFFF}\). C'est la variante employée par ZIP, gzip et Ethernet.
$$\text{CRC} = \mathrm{XorOut} \oplus \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}_{\text{poly}}(\text{crc}, b)$$ $$\text{where (CRC-16/CCITT-FALSE)}\quad \left\{ \begin{aligned} \text{poly} &= \mathtt{0x1021} \\ \mathrm{init} &= \mathtt{0xFFFF} \\ \mathrm{XorOut} &= \mathtt{0x0000} \\ \text{width} &= 16 \text{ bits (MSB-first, no reflection)} \end{aligned} \right.$$
La formule expliquée
Sur le plan conceptuel, le message \(M(x)\) est multiplié par \(x^n\) (où \(n\) est le degré du générateur), puis divisé par \(G(x)\). En pratique, on utilise un registre que l'on décale bit par bit, en y appliquant un XOR avec le polynôme dès que le bit de tête vaut 1. Les variantes réfléchies (comme le CRC-32) traitent les bits en commençant par le bit de poids faible et décalent vers la droite plutôt que vers la gauche.
$$\text{CRC}_{16} = \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}(\text{crc}, b)$$ $$\text{where}\quad \left\{ \begin{aligned} \mathrm{init} &= \mathtt{0xFFFF} \\ \text{poly} &= \mathtt{0x1021} \\ \text{step} &: \text{crc} \leftarrow \big(\text{crc} \ll 1\big) \oplus (\text{MSB}?\,\text{poly}:0) \\ \text{width} &= 16 \text{ bits, MSB-first} \end{aligned} \right.$$ $$\text{CRC}_{8} = \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}(\text{crc}, b)$$ $$\text{where}\quad \left\{ \begin{aligned} \mathrm{init} &= \mathtt{0x00} \\ \text{poly} &= \mathtt{0x07} \\ \text{step} &: \text{crc} \leftarrow \big(\text{crc} \ll 1\big) \oplus (\text{MSB}?\,\text{poly}:0) \\ \text{width} &= 8 \text{ bits, MSB-first} \end{aligned} \right.$$ $$\text{CRC}_{32} = \mathtt{0xFFFFFFFF} \oplus \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}(\text{crc}, b)$$ $$\text{where}\quad \left\{ \begin{aligned} \mathrm{init} &= \mathtt{0xFFFFFFFF} \\ \text{poly} &= \mathtt{0xEDB88320}\ (\text{reflected}) \\ \text{step} &: \text{crc} \leftarrow \big(\text{crc} \gg 1\big) \oplus (\text{LSB}?\,\text{poly}:0) \\ \text{width} &= 32 \text{ bits, LSB-first} \end{aligned} \right.$$
Exemple concret
Pour la chaîne de vérification classique 123456789 : le CRC-16/CCITT-FALSE renvoie 0x29B1 (soit 10673 en décimal), et le CRC-32/IEEE renvoie 0xCBF43926 (soit 3421780262 en décimal). Ce sont les valeurs « check » standard publiées dans les catalogues de référence sur le CRC : vous pouvez donc vérifier n'importe quelle implémentation en les comparant à ces résultats.
FAQ
Pourquoi mon résultat diffère-t-il de celui d'un autre outil ? Les variantes de CRC se distinguent par leur polynôme, leur valeur initiale, la réflexion des bits et le XOR final. Assurez-vous de comparer exactement la même variante.
Le CRC est-il un hachage sécurisé ? Non. Le CRC détecte les erreurs accidentelles, mais il est trivial à falsifier de manière intentionnelle. Pour la sécurité, utilisez SHA-256 ou un algorithme équivalent.
Quel encodage est utilisé ? Chaque caractère est pris comme sa valeur d'octet ASCII/Latin-1 sur 8 bits avant le calcul du CRC.