Mode d’emploi
- Saisissez ou collez du texte, passez l’entrée en Hexa pour des octets bruts, ou ouvrez un fichier pour calculer la somme de contrôle de son contenu.
- Gardez CRC-32 pour ZIP, gzip et PNG, ou choisissez CRC-32C pour iSCSI, ext4, Btrfs et Google Cloud Storage.
- Choisissez la sortie : « hexa (minuscules) », « HEXA (majuscules) », « Décimal » ou « Base64 ».
- Pour vérifier, collez la somme de contrôle attendue dans « Comparer avec », en hexa sans 0x, en décimal ou en Base64.
Principe de la somme de contrôle CRC32
Un contrôle de redondance cyclique traite l’entrée comme un long polynôme binaire, le divise par un polynôme générateur fixe et conserve le reste. Pour CRC-32, le reste fait 32 bits et s’écrit généralement sous la forme de 8 chiffres hexadécimaux ou d’un nombre non signé compris entre 0 et 4 294 967 295. Presque toute modification des données change le reste.
Les CRC sont conçus pour les erreurs que produisent réellement les câbles, les liaisons radio et les disques. CRC-32 détecte toute rafale de bits corrompus d’une longueur allant jusqu’à 32 bits, et une corruption aléatoire ne passe inaperçue qu’environ une fois sur 4,3 milliards. Il est en outre très rapide à calculer, ce qui explique sa présence dans ZIP, gzip, PNG et les trames Ethernet.
CRC-32 et CRC-32C
| CRC-32 | CRC-32C (Castagnoli) | |
|---|---|---|
| Polynôme | 0x04C11DB7, réfléchi 0xEDB88320 | 0x1EDC6F41, réfléchi 0x82F63B78 |
Valeur de contrôle de 123456789 | cbf43926 | e3069283 |
| Utilisé par | ZIP, gzip, PNG, Ethernet | iSCSI, SCTP, métadonnées ext4, Btrfs, Google Cloud Storage |
| Prise en charge matérielle | Instructions CRC32 ARMv8 | Instruction crc32 SSE4.2 x86, ARMv8 |
Les deux partent de 0xFFFFFFFF, traitent les bits de chaque octet en commençant par celui de poids faible et inversent la valeur finale ; seul le polynôme diffère, si bien que les mêmes données donnent deux résultats sans rapport. Le premier est ce que la plupart des outils appellent « CRC32 » et il est répertorié sous le nom CRC-32/ISO-HDLC. CRC-32C a été adopté plus tard par des protocoles de stockage et de réseau pour sa meilleure détection des erreurs. Google Cloud Storage fournit le CRC-32C, et Amazon S3 l’une ou l’autre variante, sous la forme du Base64 des quatre octets dans l’ordre gros-boutiste (big-endian), ce qui correspond exactement à la sortie Base64.
Une somme de contrôle, pas une vérification de sécurité
Un CRC protège contre les accidents, pas contre les attaques. C’est une fonction linéaire : n’importe qui peut modifier un fichier puis ajuster quatre octets pour que son CRC-32 reste inchangé. Un CRC identique ne prouve donc rien en cas de falsification délibérée. Pour vérifier un téléchargement, comparez un hachage SHA-256 provenant d’une source de confiance ; pour prouver qui a envoyé un message, utilisez un HMAC.
32 bits, c’est aussi trop peu pour identifier des données. Parmi environ 77 000 fichiers aléatoires, la probabilité que deux d’entre eux aient le même CRC-32 atteint déjà 50 % : ne l’utilisez donc pas comme identifiant unique ni comme clé de déduplication. En l’absence d’attaquant, MD5 ou SHA-256 constituent de bien meilleures empreintes.
CRC32 dans le code
# Python : zlib.crc32 est non signé en Python 3 ;
# "& 0xffffffff" n’est utile qu’en Python 2
import zlib
format(zlib.crc32(b'123456789'), '08x') # 'cbf43926'
// Node.js 20.15+ et 22.2+
require('zlib').crc32('123456789').toString(16).padStart(8, '0') // 'cbf43926'
// Go (import "hash/crc32")
crc32.ChecksumIEEE(data) // CRC-32
crc32.Checksum(data, crc32.MakeTable(crc32.Castagnoli)) // CRC-32C
// Java : java.util.zip.CRC32, et java.util.zip.CRC32C depuis Java 9
// PHP
sprintf('%08x', crc32('123456789')); // 'cbf43926'
hash('crc32b', '123456789'); // 'cbf43926', le même CRC-32
hash('crc32c', '123456789'); // 'e3069283'
hash('crc32', '123456789'); // '181989fc', un autre CRC
Attention aux noms en PHP : l’algorithme de hachage appelé crc32 n’est pas la somme de contrôle de ZIP, mais le CRC utilisé par bzip2, affiché dans l’ordre inverse des octets. Utilisez crc32b ou la fonction crc32() pour obtenir le même résultat que ZIP, gzip et cet outil. La commande Unix cksum utilise encore une autre variante, qui intègre en plus la longueur du fichier : son résultat ne correspondra donc à aucun des deux.
Exemples
| Entrée (UTF-8) | CRC-32 |
|---|---|
Hello, World! | ec4ac3d0 |
Base64.is | 915d7207 |
你好 | 50a2b841 |
Questions fréquentes
Quel est le CRC32 de « 123456789 » ?
cbf43926 (3421780262 en décimal) et son CRC-32C est e3069283. Si votre propre implémentation renvoie ces valeurs, elle utilise les mêmes paramètres que cet outil.Pourquoi mon CRC32 diffère-t-il de celui d’un autre outil ?
cksum POSIX donnent tous des résultats différents), les octets d’entrée (fins de ligne, saut de ligne final, encodage du texte), le format du nombre (certains langages renvoient un entier signé de 32 bits, ce qui rend négatives les grandes valeurs) et l’ordre des octets.Pourquoi les octets du CRC sont-ils inversés dans mon fichier ZIP ou gzip ?
unzip -v et la plupart des autres programmes affichent l’octet de poids fort en premier.Puis-je calculer le CRC32 d’un gros fichier ?
Oui. Cliquez sur « Ouvrir un fichier » : la somme de contrôle est calculée à partir des octets du fichier sur votre appareil, sans l’envoyer, et tout fichier que votre navigateur peut garder en mémoire convient. Vous pouvez ensuite comparer le résultat avec la valeur indiquée dans un fichier SFV ou dans la liste du contenu d’une archive ZIP.
CRC32 est-il une fonction de hachage ?
Il associe des données de n’importe quelle longueur à une valeur fixe de 32 bits, c’est pourquoi on le range souvent parmi les hachages, mais c’est une somme de contrôle : il détecte les erreurs accidentelles et n’offre aucune protection contre quelqu’un qui modifie les données intentionnellement. Si vous avez besoin d’une empreinte plus solide, le tableau « Tous les algorithmes », sous le résultat, affiche MD5 et la famille SHA pour la même entrée.