Contrôle de redondance cyclique

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis CRC-64)
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir CRC.

En informatique et dans certains appareils numériques, un contrôle de redondance cyclique ou CRC (Cyclic Redundancy Check) est un outil logiciel permettant de détecter les erreurs de transmission ou de transfert par ajout, combinaison et comparaison de données redondantes, obtenues grâce à une procédure de hachage. Ainsi, une erreur de redondance cyclique peut survenir lors de la copie d'un support (disque dur, CD-Rom, DVD-Rom, clé USBetc.) vers un autre support de sauvegarde.

Les CRC sont évalués (échantillonnés) avant et après la transmission ou le transfert, puis comparés pour s’assurer que les données sont strictement identiques. Les calculs de CRC les plus utilisés sont conçus afin de pouvoir toujours détecter les erreurs de certains types, comme celles dues par exemple, aux interférences lors de la transmission.

On trouve des fonctions CRC dans différents logiciels comme ceux dédiés à la sauvegarde, à la capture de données (échantillonnage) ainsi que dans les appareils et dispositifs de transmission de signaux numériques : DVB, MPEG-2 TS, DABetc.

Implémentation[modifier | modifier le code]

L’opération mathématique essentielle dans le calcul d’un CRC est une division modulo 2 dont le reste représente le CRC. Les CRC sont souvent appelés abusivement checksums (sommes de contrôle), mais les sommes de contrôle proprement dites sont le résultat d'une addition. La partie principale de l’algorithme est la suivante :

fonction crc(tableau de bits bitString[1..longueur], entier polynome)
{
    shiftRegister := valeur_initiale  // Généralement tous les bits à 0 ou 1
    pour i de 1 à longueur
    {
        si bit de poids fort de shiftRegister xor bitString[i] vaut 1
        {
            // décaler d'1 bit vers la gauche équivaut à multiplier par 2
            shiftRegister := (shiftRegister décalé d'1 bit vers la gauche) xor polynome
        }
        sinon
        {
            shiftRegister := (shiftRegister décalé d'1 bit vers la gauche)
        }
    }
    retourne shiftRegister
}

Exemples d'implementation[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

Liens externes[modifier | modifier le code]