Informatique
Calcul de sommes de contrôle CRC32, CRC16 et Adler-32
Saisis un texte ou colle des octets en hexadécimal : obtiens d'un coup les sommes de contrôle les plus utilisées dans les réseaux, les fichiers et les protocoles industriels, en hexadécimal et en décimal, et vérifie une valeur attendue.
À quoi servent les sommes de contrôle
Une somme de contrôle est un nombre court calculé à partir des données, qui change si un seul bit change. Le destinataire la recalcule et la compare à celle transmise : si elles diffèrent, les données ont été abîmées en route. Le CRC-32 de « 123456789 » vaut CBF43926, la valeur de contrôle qui sert à tester une implémentation.
Chaque algorithme a son usage. CRC-32 est celui de ZIP, PNG et Ethernet ; CRC-32C celui d'iSCSI, ext4 et Btrfs ; CRC-16/MODBUS celui des équipements industriels Modbus RTU ; CRC-16/CCITT et XMODEM ceux des protocoles série et des cartes à puce ; Adler-32 celui de la compression zlib, plus rapide mais plus faible sur des données courtes.
Il existe tant de variantes de CRC-16 parce qu'elles changent de polynôme, de valeur initiale, de réflexion des bits et de XOR final : c'est pourquoi un même message donne des résultats différents. Si tu as une valeur à vérifier sans connaître l'algorithme, colle-la dans le champ de la valeur attendue et le calculateur cherche celui qui correspond.
Erreurs fréquentes
- Calculer la somme de contrôle du texte au lieu des octets : "0A" en texte fait deux caractères, en hexadécimal un seul octet.
- Confondre les variantes de CRC-16 : MODBUS, ARC et CCITT donnent des résultats différents sur les mêmes données.
- Utiliser un CRC pour vérifier des téléchargements de sources non fiables : il se falsifie facilement, il faut SHA-256.
Questions fréquentes
Pourquoi le CRC Modbus semble-t-il avoir ses octets inversés ?
Modbus transmet le CRC octet de poids faible en premier. Si la valeur calculée est 4B37, le message contient les octets 37 4B.
Quelle différence entre CRC-32 et CRC-32C ?
Ils utilisent des polynômes différents : celui de Castagnoli (32C) détecte mieux certaines erreurs et dispose d'instructions dédiées dans les processeurs modernes, d'où sa préférence dans le stockage et les réseaux rapides.
Deux fichiers différents peuvent-ils avoir la même somme de contrôle ?
Oui : 32 bits donnent environ 4 milliards de valeurs, les collisions fortuites arrivent sur un grand nombre de fichiers, et en fabriquer une exprès est trivial.
Comment fonctionne ce calcul
CRC : les données sont vues comme un polynôme sur les bits et divisées par un polynôme générateur ; le reste est la somme de contrôle. Chaque variante est définie par sa largeur, son polynôme, sa valeur initiale, la réflexion d'entrée et de sortie et le XOR final (par exemple CRC-32 : 32 bits, 0x04C11DB7, initial 0xFFFFFFFF, réfléchi, XOR 0xFFFFFFFF). Adler-32 : A = 1 + somme des octets, B = somme des valeurs successives de A, toutes deux modulo 65521, résultat B·65536 + A. Fletcher-16 : pareil modulo 255 et sans le 1 initial.