• STATISTIQUES
  • Il y a eu un total de 1 membres et 7312 visiteurs sur le site dans les dernières 24h pour un total de 7 313 personnes!


    1 membre s'est inscrit dans les dernières 24h!


    Membres: 2 606
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] dcode
    dcode.fr est le site indispensable pour décoder des messages, tricher aux jeux de lettres, résoudre des énigmes...
    Outils / Add-on
    [EN] Packet Storm
    Packet Storm est un site qui combine nouvelles de la sécurité informatique, téléchargemen...
    Vulnérabilités
    [EN] Listbrain Version 3
    Site proposant 66 challenges présentés dans une liste mélangée.
    Challenges
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [EN] Exploit-db
    Une base de données d'exploits triés par genre (GHDB, Remote, Local, Web, DOS, ShellCode) à ...
    Vulnérabilités
    [EN] Astalavista
    JavaScript: 1, Exploit: 2, Crypto: 34, CrackIt: 15, Stegano: 8, Programming: 12, Logic: 36, Special: 6, Science: 4, Info...
    Challenges
    [EN] Gekko
    Site de challenge présenter sous la forme d'une quête. Vous êtes un agent secret qui répond sous le nom...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Calcul du CRC16 CCIT d'une chaîne
22-09-2013, 15h39 (Modification du message : 23-09-2013, 00h18 par crown.)
Message : #1
crown Hors ligne
Membre actif
*



Messages : 52
Sujets : 5
Points: 18
Inscription : Oct 2011
Calcul du CRC16 CCIT d'une chaîne
Code C :

#include <stdio.h>//printf()
#include <string.h>//strlen()

typedef unsigned int int_32;
typedef unsigned short int int_16;
typedef unsigned char int_8;

typedef union
{
        int_32 Valeur;
        struct
        {
                int_8 Entree;
                int_16 Reste;
                int_8 Sortie;
        }Partie;

}CRC16_Partie;

static CRC16_Partie _CRC16;

const int polynome_crc = 0x1021; // polynome 16 bits CITT
const int crc_initiale = 0xFFFF; // valeur initial du CRC

void octetCRC16(int_8 octet)
{
        int nombreOctet = 8;
        _CRC16.Partie.Entree = octet;

        do
        {
                _CRC16.Valeur <<= 1;
                if(_CRC16.Partie.Sortie & 0x01)
                        _CRC16.Partie.Reste ^= polynome_crc;
        }while(--nombreOctet);
}

int_16 StringToCRC16(char * s)
{
        _CRC16.Partie.Reste = crc_initiale;
        int i = 0;
        int size = strlen(s);
        for(i = 1; i <= size; i++)
                octetCRC16(s[i]);
        octetCRC16(0x00);
        octetCRC16(0x00);

        return _CRC16.Partie.Reste;
}
int main()
{
        char * chaine = "Test";
        int_16 crc = StringToCRC16(chaine);
        printf("CRC de la chaine `%s` : %x \n",chaine,crc);
        return 0;
}
 


Output :

Code SHELL :
{ crown ~/Bureau/ALL/C } $ ./crc16
CRC de la chaine `Test` : 0


Bonjour à tous, donc ma question va être très courte.... Pourquoi ? Pourquoi est ce que j'obtiens 0 alors que j'ai bien quand rentré une chaîne de caractère. J'ai sûrement fait un erreur mais je vois pas où.

Ressource : http://dvsoft.developpez.com/Articles/CRC/
+1 (1) -1 (0) Répondre
22-09-2013, 19h15
Message : #2
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: Calcul du CRC16 CCIT d'une chaîne
salut OriginalsGeeks (ça faisait longtemps Wink),

le sujet est interessant par contre t'aurais pu te fendre de quelques explications pour qu'on te comprenne sans être obligé d'aller se coltiner le tuto sur le CRC, ça coutait pas plus cher

en l'occurence c'est un problème d'alignement :
Code DIFF :
--- 1/pouet.c   2013-09-22 19:12:48.557637700 +0200
+++ 2/pouet.c   2013-09-22 19:12:38.983620900 +0200
@@ -5,6 +5,8 @@
 typedef unsigned short int int_16;
 typedef unsigned char int_8;

+#pragma pack(push)
+#pragma pack(1)
 typedef union {
        int_32 Valeur;
        struct {
@@ -13,6 +15,7 @@
                int_8 Sortie;
        }Partie;
 }CRC16_Partie;
+#pragma pack(pop)

 static CRC16_Partie _CRC16;


et du coup ça marche mieux forcément :
Code BASH :
$ ./pouet.exe
CRC de la chaine `Test` : ae42
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (2) -1 (0) Répondre
22-09-2013, 20h07 (Modification du message : 22-09-2013, 20h08 par crown.)
Message : #3
crown Hors ligne
Membre actif
*



Messages : 52
Sujets : 5
Points: 18
Inscription : Oct 2011
RE: Calcul du CRC16 CCIT d'une chaîne
Merci pour ta réponse Smile

Ouai j'ai fais une petite pause Smile pour le fait de pas avoir expliqué désolé j'ai posté dans l'idée que la plupart des gens connaissaient.

D'ailleurs en lisant le wiki en fr je me suis aperçu qu'il existe une option pour GCC qui permet de détecter ce genre de problèmes : -Wpadded.

Et une dernière question, comment t'as su que c'était une erreur d'alignement, peut etre que t'avais l'option -Wpadded activée ?

Doc : http://fr.wikipedia.org/wiki/Alignement_en_m%C3%A9moire
+1 (1) -1 (0) Répondre
22-09-2013, 20h44
Message : #4
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: Calcul du CRC16 CCIT d'une chaîne
(22-09-2013, 20h07)OriginalsGeeks a écrit : comment t'as su que c'était une erreur d'alignement, peut etre que t'avais l'option -Wpadded activée ?

non j'ai vu la tête de ta structure (8/16/8 bits) je me suis douté que c'était ça, c'est assez classique en fait mais bien vu pour -Wpadded je connaissais pas Smile
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (0) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut