Calculateur CRC-32 - Somme de contrôle de texte et fichiers
Calculateur de somme de contrôle CRC-32
Encodé en UTF-8 avant le hachage. 6 octets
| Longueur du message | 6 octets |
| CRC-32 | 0xFF55531A |
| CRC-32b (octet nul final) | 0x2F9F43A4 |
CRC-32 détecte les corruptions accidentelles dans les archives zip, les flux gzip, les blocs PNG et les trames Ethernet. Ce n’est pas une fonction de hachage cryptographique : elle est linéaire, se forge sans effort et ne doit jamais servir à garantir l’intégrité face à un adversaire.
Ce Qui Est
Une somme de contrôle est un résumé court et de taille fixe d'un message plus long, calculé de telle sorte que toute modification accidentelle du message ait une probabilité écrasante de modifier aussi ce résumé. L'idée est plus ancienne que l'ordinateur personnel. IBM construisait des machines à tabuler qui lisaient des cartes perforées, et les opérateurs constatèrent que les données transférées entre machines se corrompaient de temps en temps : une colonne mal perforée, une carte tordue, un lecteur usé. La réponse de l'ingénieur fut d'acheminer avec les données une valeur arithmétique redondante que la machine réceptrice recalculait et comparait ; si les deux concordaient, le transfert était réputé intact, et sinon on demandait une retransmission. Les descendants modernes de cette idée sont les contrôles de redondance cyclique. Un CRC considère le message comme un polynôme sur le corps GF(2), où l'addition et la soustraction sont toutes deux l'OU exclusif, et calcule le reste de la division de ce polynôme par un polynôme générateur fixé. Le CRC-32 utilise le générateur 0x04C11DB7 et, comme la formulation à bits inversés est bien moins coûteuse à implémenter en matériel et en logiciel que la forme directe, le code réel travaille avec la constante inversée 0xEDB88320.
L'implémentation habituelle précalcule une table de 256 entrées puis traite le message octet par octet avec une seule consultation et un décalage : crc = table[(crc OU octet) ET 0xFF] OU (crc >> 8). C'est cette table qui permet de vérifier un mégaoctet en quelques millisecondes, et la construire à partir de la définition plutôt que de coller un tableau magique garantit que le code implémente bien ce qu'il prétend implémenter. Le registre est initialisé à 0xFFFFFFFF avant le premier octet et le résultat est soumis à un OU exclusif avec 0xFFFFFFFF en sortie, une technique appelée augmentation. Aucun des deux OU exclusifs n'est décoratif. Avec une graine nulle, les octets nuls initiaux ne modifient pas le registre, si bien que le message 00 00 41 et le message 41 produisent exactement la même valeur ; initialiser avec des bits à un force l'absorption de ces octets, et c'est ce qui rend détectable une suite de zéros. L'OU exclusif final garantit que le message accompagné de sa propre somme de contrôle, ajoutée en ordre little-endian, laisse le résidu fixe 0x2144DF1C que le récepteur vérifie, et c'est pourquoi la somme d'un message vide vaut le propre 0x00000000 plutôt qu'une suite de uns. CRC-32 et CRC-32b sont le même algorithme avec des cadrages différents : la variante affichée ici ajoute un unique octet 0x00 avant calcul, convention employée par certains protocoles pour distinguer la charge de son terminateur, tandis que d'autres sources utilisent ce nom pour la variante BZIP2, qui ajoute quatre octets nuls ; précisez donc toujours le cadrage employé.
En pratique, le CRC-32 est le champ d'intégrité de chaque entrée de ZIP, de la fin de chaque flux gzip et zlib, de chaque fragment d'un fichier PNG, des flux de transport MPEG-2 et de la séquence de contrôle de trame de chaque trame Ethernet, où il est abrégé en FCS. Ce que le CRC-32 n'est absolument pas, c'est un hachage cryptographique. C'est une fonction linéaire sur GF(2) : appliquer le même OU exclusif à deux messages de même longueur produit la même différence entre leurs sommes, si bien que quiconque connaît un message et sa somme peut dériver un correctif de quatre octets donnant la somme de son choix. Il ne fait en outre que 32 bits de large, si bien que par le principe des tiroirs deux messages distincts partagent une somme aux alentours de la racine carrée de 2^32, de l'ordre de 65536 messages, tandis que toute erreur accidentelle sur un seul bit est détectée avec certitude. Utilisez-le pour la corruption accidentelle, jamais pour garantir l'intégrité face à un adversaire.
Comment utiliser
- Ouvrez le Calculateur CRC-32 dans votre navigateur. La somme est calculée localement en JavaScript, rien de ce que vous saisissez ou sélectionnez n'est envoyé à un serveur.
- Choisissez un mode de saisie avec les trois boutons du haut : Text pour une chaîne, Hex bytes pour du binaire brut, ou File pour contrôler un document entier.
- En mode Text, saisissez ou collez dans le champ Input text. La chaîne est d'abord encodée en UTF-8, donc les accents et les emojis occupent plus d'octets qu'ils n'en semblent, et le nombre d'octets se met à jour en direct.
- En mode Hex, collez des paires de chiffres hexadécimaux comme 48 65 6c 6c 6f. Les espaces, les virgules et les préfixes 0x sont supprimés automatiquement, un nombre impair de chiffres est refusé et tout caractère non hexadécimal provoque une erreur au lieu d'être ignoré en silence.
- En mode File, choisissez un fichier avec le contrôle Choose a file. Le calculateur le lit via l'API de fichiers du navigateur et indique la taille sur disque ainsi que le nombre d'octets réellement traités.
- Choisissez la représentation nécessaire dans le menu Output format : Hex, Decimal, Octal, Binary ou Base64. Le champ CRC-32 result se réaffiche instantanément dans le format choisi.
- Consultez le tableau récapitulatif pour connaître la longueur exacte du message en octets, la valeur CRC-32 et la valeur CRC-32b calculée avec un octet nul final, à titre de comparaison.
- Comparez la valeur obtenue à la somme de contrôle publiée afin de confirmer qu'un téléchargement, un envoi ou un transfert est arrivé intact.
Exemples
Entrée: Mode Text, la chaîne CRC-32
Processus:
6 octets UTF-8 43 52 43 2D 33 32 traversant la boucle à tableRésultat: CRC-32 = 0xFF55531A, et CRC-32b avec un octet nul final = 0x2F9F43A4
Entrée: Mode Text, la chaîne 123456789
Processus:
Valeur de contrôle d'ISO 3309 et UIT-T V.42 pour la variante CRC-32/BZIP2Résultat: 0xCBF43926 — si votre implémentation diffère, les paramètres sont erronés
Entrée: Mode Hex, les octets 48 65 6c 6c 6f
Processus:
Cinq octets bruts signifiant Hello, saisis en hexadécimal plutôt qu'en texteRésultat: 0xF7D18982 — différent du résultat obtenu en traitant le mot Hello comme du texte
Entrée: Mode File, un fichier vide ou de taille nulle
Processus:
La boucle ne s'exécute jamais, la graine traverse donc directement l'OU exclusif finalRésultat: 0x00000000, et c'est pourquoi un message vide est facile à reconnaître
Recherches Connexes
Les gens recherchent aussi : calculateur crc32, calculer crc32, somme de contrôle, crc32 en ligne, crc32 de fichier, crc32 hexadécimal.
calculateur crc32calculer crc32somme de contrôlecrc32 en lignecrc32 de fichiercrc32 hexadécimalcrc32 de textecrc32bnorme iso 3309uit-t v.420xedb88320vérifier l'intégritécrc32 zipcrc32 gzipcrc pngethernet fcscrc32 base64crc32 vs sha256détecter une corruptionoutil de checksum
Questions Fréquemment Posées
À quoi sert concrètement le CRC-32 dans les logiciels ?
Le CRC-32 est utilisé partout où une vérification bon marché et quasi certaine contre la corruption accidentelle vaut mieux qu'une garantie de sécurité. Chaque archive ZIP en stocke une par entrée dans son répertoire central, et unzip la vérifie à l'extraction : un fichier tronqué ou dont des bits ont changé est signalé au lieu de produire silencieusement n'importe quoi. gzip et zlib ajoutent un CRC-32 à la fin de leur flux compressé, et c'est pourquoi un fichier .gz corrompu produit une erreur de somme de contrôle plutôt qu'une inexplicable erreur de décompression. Le PNG range un CRC-32 dans chaque fragment, ce qui permet à la fois de valider chaque bloc indépendamment et d'arrêter le décodeur au premier fragment douteux. Les flux de transport MPEG-2 en portent un par paquet, et la séquence de contrôle de trame d'Ethernet est un CRC-32 calculé par le matériel de la carte réseau sur chaque trame qui traverse un commutateur. Dans tous ces cas le modèle de menace est le même : bruit, vieillissement, écritures partielles et versions divergentes, et non un attaquant déterminé.
Le CRC-32 est-il un hachage cryptographique ? Puis-je l'utiliser pour des mots de passe ?
Non, et s'en servir pour des mots de passe ou pour vérifier l'intégrité d'un téléchargement provenant d'une source non fiable serait une grave erreur. Un CRC est une fonction linéaire sur le corps GF(2), ce qui signifie qu'appliquer le même OU exclusif à deux messages produit la même différence entre leurs sommes. Quiconque connaît un message et sa somme peut donc construire un autre message, différent de quatre octets au plus, portant la somme de son choix. C'est une falsification qui ne demande ni ingenuity ni recherche. Avec seulement 32 bits de largeur, un attaquant peut précalculer une collision en quelques secondes sur GPU. Il n'a ni clé, ni sel, ni facteur de coût, ni comportement en avalanche, et ne fournit donc aucune des propriétés d'irréversibilité, d'imprévisibilité ou de résistance à la recherche exhaustive dont dépendent le stockage de mots de passe et la signature de code. Utilisez un hachage cryptographique comme SHA-256 pour l'intégrité face à un adversaire, et une fonction spécialisée comme Argon2id ou bcrypt pour tout ce qui ressemble à un identifiant.
Pourquoi CRC-32b donne-t-il un résultat différent de CRC-32 ?
Parce que ces deux noms désignent le même algorithme enveloppé dans des cadrages légèrement différents. La ligne CRC-32b de ce calculateur exécute l'algorithme identique sur vos octets augmentés d'un octet 0x00 final, et cet octet supplémentaire modifie l'état du registre, si bien que toutes les valeurs sont décalées. L'intérêt d'une telle variante est de distinguer la charge de son propre terminateur, afin qu'un flux qui se termine légitimement par un octet nul ne soit pas confondu avec un autre qui s'y termine par accident. Sachez que le terme est employé de façon incohérente : la variante BZIP2, habituellement notée CRC-32/BZIP2 et identifiée par la valeur de contrôle 0xCBF43926 pour la chaîne 123456789, ajoute quatre octets nuls et non un, et constitue une fonction différente. Si vous dialoguez avec un outil ou un format précis, vérifiez ce que cette implémentation ajoute réellement plutôt que de vous fier au nom.
Que signifie la constante 0xEDB88320 ?
C'est la forme inversée du polynôme générateur du CRC-32, 0x04C11DB7, et elle apparaît dans pratiquement toutes les implémentations logicielles de CRC-32 que vous croiserez. Le polynôme générateur définit quels motifs de bits sont considérés comme des erreurs. Sa forme normale, bits dans l'ordre direct, est celle des manuels, mais l'ordre inversé permet d'exécuter tout le calcul de droite à gauche à travers les octets, ce qui exige une consultation de table et un décalage par octet au lieu de huit décalages conditionnels. Dans l'implémentation inversée, la valeur 0x04C11DB7 devient 0xEDB88320, et chacune des 256 entrées de la table s'obtient en partant de la valeur d'un octet et en appliquant huit fois la boucle d'inversion : si le bit de poids faible est à un, on fait l'OU exclusif avec 0xEDB88320 puis on décale à droite, sinon on décale simplement à droite. Construire la table à partir de cette définition, comme le fait cet outil, est plus sûr que coller un tableau de 256 entrées, car cela élimine tout risque que la table livrée dérive de la définition qu'elle prétend implémenter.
Pourquoi deux fichiers différents obtiennent-ils parfois le même CRC-32 ?
Parce que l'espace de sortie ne fait que 32 bits : il y a environ 4,3 milliards de sommes possibles à partager entre tous les messages possibles, et il est inévitable que certains messages en partagent une. En appliquant le principe des tiroirs, le nombre de messages nécessaires pour qu'une collision devienne probable est approximativement la racine carrée de 2^32, soit environ 65536 : des données aléatoires produisent donc un CRC en double dans cette zone. Les fichiers réels sont moins favorables que l'aléatoire, car des documents structurés ne diffèrent souvent que sur quelques emplacements prévisibles. Ce n'est pas un défaut de conception, c'est la conception qui fonctionne comme prévu. Un CRC-32 détecte avec certitude toute erreur sur un seul bit et toute erreur en salve jusqu'à 32 bits, ce qui couvre pratiquement toute la corruption accidentelle due au bruit, au vieillissement et aux pannes de transfert. Ce qu'il ne peut pas faire, c'est établir une identité face à un adversaire, car un adversaire peut construire une collision délibérément en quelques secondes. Si vous avez besoin de résistance aux collisions, il vous faut un hachage cryptographique.
Comment vérifier qu'un fichier téléchargé n'est pas corrompu ?
Calculez le CRC-32 du fichier ici et comparez-le à la somme de contrôle enregistrée par l'éditeur ou par le système de transfert. S'ils concordent, le fichier est arrivé sans corruption. Beaucoup d'outils le font déjà pour vous : unzip vérifie chaque entrée, gzip et zlib vérifient la fin du flux, et les navigateurs vérifient les fragments PNG au décodage. Mais calculer la valeur soi-même reste le moyen le plus rapide de confirmer ce qu'un outil donné a produit, et c'est le seul moyen lorsque vous avez un format inhabituel sans vérification intégrée. Choisissez le mode File, sélectionnez le téléchargement et lisez la sortie CRC-32 of file. Une mise en garde importante : une concordance prouve que le fichier est bien celui qu'a produit l'éditeur, à condition que vous fassiez confiance à cet éditeur. Si le téléchargement a pu être altéré en transit, un attaquant disposant de cette capacité peut fabriquer un autre fichier portant la même somme, et c'est précisément pourquoi les publications signées avec GPG ou des signatures Sigstore existent en complément des sommes de contrôle.
Mon fichier ou mon texte est-il envoyé à un serveur ?
Non. Le calculateur est un composant côté client : le JavaScript de votre navigateur lit votre texte, vos octets hexadécimaux ou le fichier que vous avez sélectionné, construit la table CRC-32 en mémoire et exécute la boucle localement. Rien n'est transmis sur le réseau, rien n'est écrit dans un journal de serveur et rien ne persiste après la fermeture de l'onglet. Pour le mode fichier, c'est mis en œuvre avec l'API de fichiers du navigateur, qui lit le fichier du disque local à la demande. L'intérêt est pratique, et pas seulement lié à la vie privée : vous pouvez contrôler une image disque de plusieurs gigaoctets ou une archive confidentielle réglementée sans attendre un envoi et sans remettre une copie de vos données à un service tiers.