Le CRC32 (32 bits) c'est quoi ?

Par : A. YEZZA

Introduction


Définition : Le CRC32 (Cyclic Redundancy Checksum en anglais, Contrôle de Redondance Cyclique en français), est un nombre calculé sur la base de 32 bits (d'où vient le suffixe32) et qui représente une signature (unique) de données quelconques.

En fait, le CRC32 est un nombre composé de 8 parties, chaque partie tient sur 4 bits et elle est formée d’un nombre hexadécimal (représentation numérique en base 16) à un chiffre (variant de 0 à F en hexadécimal, i.e., peut prendre les valeurs : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E ou F) comme illustré dans la figure ci-dessous :


Donc, le plus petit CRC32 vaut : 00000000 et le plus grand vaut : FFFFFFFF = 4 294 967 295 en représentation décimale. Désormais, le mot CRC fait référence au CRC32, c'est-à-dire le CRC basé sur 32 bits.

Autrement dit, en termes mathématiques, le CRC est une fonction associant à chaque donnée un nombre hexadécimal unique dans le sens que deux données différentes ont toujours des CRC différents. Ceci dit, cette confirmation reste valable dans le domaine de la théorie, car la réalité c’est que la probabilité de trouver deux données différentes ayant le même CRC (signature) est tellement petite que le CRC peut être considéré comme étant une signature unique. En fait, deux données qui diffèrent d’un seul bit ont certainement des CRC complètement différents. Les données traitées peuvent provenir directement de la mémoire de l’ordinateur (bits), d'un flux réseau ou d’un fichier; dans ce dernier cas, on parle plutôt du CRC d’un fichier. Autrement dit, le CRC du fichier est la même chose que le CRC de sont contenu.

Exemple : La chaine de caractères "Bonjour le monde !" possède le CRC32 : 5085D1FE. Si vous créez un fichier texte par exemple : MonFichier.txt en utilisant le notepad sous Windows, vous collez cette chaine de caractères telle quelle sans plus, alors le fichier aura le même CRC32. Rappelez-vous que le calcul du CRC se fait sur des nombres binaires, donc en se basant sur la figure précédente, ce nombre 5085D1FE est représenté comme suit :


Sans rentrer dans les détails techniques et mathématiques, le calcul du CRC s'effectue sur des nombres binaires (en base 2), c'est-à-dire des 0 et des 1. Il utilise un polynôme fixe et l'opérateur XOR appliqué à des données binaires. Le nombre d’algorithmes utilisés pour calculer le CRC est illimité ! Par contre, peu importe l’algorithme, le nombre de possibilités des valeurs du CRC est limité à : 232 = 4 294 967 296 (plus de 4 milliards de possibilités). Par ailleurs, pour être conforme à l’existant et aux standards du marché, les fabricants de logiciels ont opté dans leurs développements faisant appel à la notion du CRC pour l’utilisation du même algorithme déjà utilisé par les produits les plus connus comme Info-zip, WinZip, WinRar, WinAce pour ne pas en mentionner que quelques uns. Si vous êtes intéressé par les détails techniques du CRC, voici une liste de quelques liens où vous pouvez trouver des informations plus détaillées sur le sujet :

Imaginez que vous disposiez de deux fichiers ayant la même taille sur des supports différents ou identiques et que vous vouliez savoir s’ils sont vraiment identiques. La façon la plus sûre est de les comparer bit à bit, ce qui risque de prendre un temps extrêmement long si le fichier possède une taille importante, et particulièrement si les fichiers sont dans les faits identiques ! Calculer les CRC des deux fichiers et les comparer est beaucoup plus rapide et nous permet de conclure à presque 100% qu’ils sont identiques s’ils ont le même CRC et à 100% qu’ils sont différents s’ils ont des CRC différents. Une autre utilisation du CRC consiste à vérifier l’intégrité d’un fichier (d’une donnée). Il suffit dans ce cas de calculer au préalable le CRC du fichier (de la donnée), le mettre en référence (le stocker) et pour vérifier son intégrité à n’importe quel moment, il suffit de recalculer son CRC et de le comparer avec le CRC référencé. Si ces derniers sont identiques, on peut confirmer l’intégrité du fichier (la donnée). Dans le cas contraire, l’intégrité n’est plus conservée, autrement dit, le fichier (la donnée) a été modifié (modifiée) depuis la dernière fois où son CRC a été référencé. Ce dernier mécanisme est déjà utilisé par plusieurs fabricants de logiciels où l'intégrité des données est un élément important. Par contre, il ne faut pas confondre intégrité et sécurité. Notez que le CRC32 ne peut être utilisé en aucun cas comme fonction de hachage pour stocker des alias/signatures de données sensibles comme un mot de passe, un ticket etc. Des algorithmes de hachage plus avancés comme MD2, MD4, MD5, SHA-1, SHA-2 etc., peuvent être utilisés dans les situations où la sécurité est de rigueur.