IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Comprendre comment le checksum est calculé


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut Comprendre comment le checksum est calculé
    Bonjour à tous et à toutes ,


    Je cherche a comprendre le fonctionnement du checksum quand je calcul mon fichier.bin et ceci avec un logiciel éxterne dont voici l'évolution du checksum a chaque chnagement fait par l'utilisateur .





    Je vais faire quelques exemples pour comprendre ce checksum :

    le checksum actuel : 31 22 05 70 89 02 20 7E

    Checksum calculé : 81 0C CA 8C FE 2A 38 7B


    On va changer juste le premier OCTET de la chaine et on va voir le changement du premier OCTET .


    On va incrémenter d'un BYTE la premiére chaine pour voir le chnagement des BYTES dans la 2 éme chaine :


    41 22 05 70 89 02 20 7E

    Résultat aprés incrémentation d'un Byte Gauche dans la 2 éme chaine :


    F1 0C CA 8C FE 2A 38 7B



    51 22 05 70 89 02 20 7E
    Résultat aprés incrémentation d'un Byte de gauche dans la 2 éme chaine :

    E1 0C CA 8C FE 2A 38 7B


    On monte toujours d'un Byte de gauche c'est à dire de 51 a 61


    61 22 05 70 89 02 20 7E
    D1 0C CA 8C FE 2A 38 7B


    Plus on ajoute un byte on remarquera que y'a une décrementation .

    Premier Octet CRC 1 : 61
    Premier Octet CRC 2 Calculé : D1


    Premier Octet CRC 71
    Premier Octet CRC 2 Calculé : C1


    Dés qu'on arrive au 8 l'algo fais l'inverse c'est ç dire décremente i-- ;

    Premier Octet CRC : 81
    Premier Octet CRC 2 Calculé : 31


    Premier Octet CRC : 91
    Premier Octet CRC 2 Calculé : 21



    Pour le Byte de Droite c'est simple plus on ajoute un byte plus il sera ajoutée à la deuxiéme chaine CRC genérer c'est à dire si on ajoutes +1 on a +1 .


    CRC 1 : 32 22 05 70 89 02 20 7E

    Résultat CRC 2 Calculé : 82 0C CA 8C FE 2A 38 7B


    CRC 1 : 33 22 05 70 89 02 20 7E
    Résultat CRC 2 Calculé : 83 0C CA 8C FE 2A 38 7B


    CRC 1 : 34 22 05 70 89 02 20 7E
    Résultat CRC 2 Calculé : 85 0C CA 8C FE 2A 38 7B




    CRC 1 : 37 22 05 70 89 02 20 7E
    Résultat CRC 2 Calculé : 87 0C CA 8C FE 2A 38 7B


    Et ainsi de suite .


    Le Byte de GAUCHE et incrémenter d'un BYTE i ++
    Le Byte de DROITE et décrémenter d'un BYTE i --





    Fred .














    C'est les premiers TESTS éffectués sur ce type de Checksum .

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Fred.77 Voir le message
    Je cherche a comprendre le fonctionnement du checksum quand je calcul mon fichier.bin et ceci avec un logiciel éxterne dont voici l'évolution du checksum a chaque chnagement fait par l'utilisateur .
    Cette question n'a aucun rapport avec le langage C. C'est une question de retro-ingéniérie (activité fumeuse à la légalité douteuse...)

    Un checksum, en principe, c'est une somme entière sans retenue, faite avec des mots d'une largeur de bits bien définie (8, 16, 32 etc), puis un complément à 2 (inversion des bits, suivit d'un +1)

    Si le résultat n'est pas celui attendu, c'est que ce n'est pas un checksum, mais, par exemple un CRC8 ou 16 etc. Dans ce cas, il faut avoir la specification originale, car, à ma connaissance, on ne peut pas retrouver la méthode à partir des données.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut
    Bonsoir à vous Emmanuel Delahaye ,


    J'ai passer plus de 2 mois a comprendre ce type de checksum et par mes recherches j'ai constaté que chaque BYTE de droite est Décrementer -1 et chaque BYTE de gauche est Incrémenter -1 sur la chaine .




  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fred.77 Voir le message
    Bonjour à tous et à toutes ,


    Je cherche a comprendre le fonctionnement du checksum quand je calcul mon fichier.bin et ceci avec un logiciel éxterne dont voici l'évolution du checksum a chaque chnagement fait par l'utilisateur .





    Je vais faire quelques exemples pour comprendre ce checksum :

    le checksum actuel : 31 22 05 70 89 02 20 7E

    Checksum calculé : 81 0C CA 8C FE 2A 38 7B


    On va changer juste le premier OCTET de la chaine et on va voir le changement du premier OCTET .


    On va incrémenter d'un BYTE la premiére chaine pour voir le chnagement des BYTES dans la 2 éme chaine :


    41 22 05 70 89 02 20 7E

    Résultat aprés incrémentation d'un Byte Gauche dans la 2 éme chaine :


    F1 0C CA 8C FE 2A 38 7B



    51 22 05 70 89 02 20 7E
    Résultat aprés incrémentation d'un Byte de gauche dans la 2 éme chaine :

    E1 0C CA 8C FE 2A 38 7B


    On monte toujours d'un Byte de gauche c'est à dire de 51 a 61


    61 22 05 70 89 02 20 7E
    D1 0C CA 8C FE 2A 38 7B


    Plus on ajoute un byte on remarquera que y'a une décrementation .

    Premier Octet CRC 1 : 61
    Premier Octet CRC 2 Calculé : D1


    Premier Octet CRC 71
    Premier Octet CRC 2 Calculé : C1


    Dés qu'on arrive au 8 l'algo fais l'inverse c'est ç dire décremente i-- ;

    Premier Octet CRC : 81
    Premier Octet CRC 2 Calculé : 31


    Premier Octet CRC : 91
    Premier Octet CRC 2 Calculé : 21



    Pour le Byte de Droite c'est simple plus on ajoute un byte plus il sera ajoutée à la deuxiéme chaine CRC genérer c'est à dire si on ajoutes +1 on a +1 .


    CRC 1 : 32 22 05 70 89 02 20 7E

    Résultat CRC 2 Calculé : 82 0C CA 8C FE 2A 38 7B


    CRC 1 : 33 22 05 70 89 02 20 7E
    Résultat CRC 2 Calculé : 83 0C CA 8C FE 2A 38 7B


    CRC 1 : 34 22 05 70 89 02 20 7E
    Résultat CRC 2 Calculé : 85 0C CA 8C FE 2A 38 7B




    CRC 1 : 37 22 05 70 89 02 20 7E
    Résultat CRC 2 Calculé : 87 0C CA 8C FE 2A 38 7B


    Et ainsi de suite .


    Le Byte de GAUCHE et incrémenter d'un BYTE i ++
    Le Byte de DROITE et décrémenter d'un BYTE i --





    Fred .














    C'est les premiers TESTS éffectués sur ce type de Checksum .
    Arrête de te prendre la tête. Regarde les spec de ton checksum et tu comprendras comment il a été calculé.

    Quand à calculer l'inverse c'est perdu d'avance. Déjà rien qu'avec l'expression "y=x3 + x2 + x + 1" t'auras du mal à retrouver x en connaissant y alors avec un checksum qui est 1000 fois plus complexe que cette simple équation...
    C'est pas pour rien que ceux qui tentent de casser MD5 à l'université de Tokyo sont composés de super-mathématiciens...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut
    Bonjour Sve@r ,


    J'ai utilisé la spec comme cité sur différents sites :

    CRC64
    1*x^7 + 0*x^6 + 1*x^5 + 0*x^4 + 0*x^3 + 0*x^2 + 0*x^1 + 0*x^0.

    et en autres wikipedia : x64 + x4 + x3 + x + 1

    Mais le résultat (Checksum génerer ) est complétement différent .
    J'ai étudier l'algo des Bytes et j'ai constaté que c'est un XOR Checksum .

    Plus on ajoute un BYTE à droite y'a une Décrementation i-- ;
    Plus on ajoute un BYTE à gauche y'a une Incrémentation i++ ;


    Le changement des BYTES sur la chaine 8 OCTETS pourras étre constaté sur le logiciel qui calcul ce checksum .


    Donc , je me référencie a ce programme pour voir c'est mon checksum est bon ou pas .


    Merci d'avoir participé à cette conversation qui pourras finir peu étre par une solution .

Discussions similaires

  1. [Caml] Du mal à comprendre comment cela fonctionne...
    Par Sir Caedes dans le forum Caml
    Réponses: 16
    Dernier message: 05/01/2006, 11h52
  2. W2000 serveur Comment trouver qui est connecté ?
    Par Mariussy dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 06/12/2005, 14h06
  3. [XSLT][VARIABLE] comment un noeud est-il stocké?
    Par Devotion dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 02/11/2004, 14h19
  4. [linux] socket comment savoir si est un client est d
    Par Mascos dans le forum Réseau
    Réponses: 14
    Dernier message: 04/08/2004, 12h05
  5. Réponses: 2
    Dernier message: 22/03/2004, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo