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 :

BUG FIX conversion SHA 1


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut BUG FIX conversion SHA 1
    Bonjour à tous,
    Mon projet s'inspire de l'aide des membres du forum ainsi que des sources disponible sur le net, les éléments mis bout à bout m'ont permis d'obtenir la conversion en sha1 d'une chaine de caractères.

    MAIS, le problème est le suivant : Le message est correctement affiché dans la mesure ou le premier caractère d'un bloque ne commence pas par 0. les résultats étant sur 40 digits, si il manque un ou plusieurs 0 dans le résultat, le résultat devient donc faux

    Exemple d'erreur :
    i attendu : 042dc4512fa3d391c5170cf3aa61e6a638f84342
    i renvoyé : 42dc4512fa3d391c5170cf3aa61e6a638f84342

    9 attendu : 0ade7c2cf97f75d009975f4d720d1fa6c19f4897
    9 renvoyé : ade7c2cf97f75d09975f4d720d1fa6c19f4897

    Voici le code:


    main.c
    BUG FIXé
    i attendu : 042dc4512fa3d391c5170cf3aa61e6a638f84342
    i renvoyé : 42dc4512fa3d391c5170cf3aa61e6a638f84342

    9 attendu : 0ade7c2cf97f75d009975f4d720d1fa6c19f4897
    9 renvoyé : ade7c2cf97f75d09975f4d720d1fa6c19f4897


    printf("%x", sha.Message_Digest[i]);

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Il suffit -je pense- de spécifier à printf qu'il faut afficher les 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i = 0; i < 5 ; i++)
    {
        /* remplacement de %c par %0x*/
        printf("%0x", sha.Message_Digest[i]);
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    désolé mabu, merci de ta réponse, mais le problème persiste

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    De mémoire, j'aurai plutôt utilisé cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%.2x", sha.Message_Digest[i]);
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    désolé mabu, merci de ta réponse, mais le problème persiste
    Oui, il faut aussi lui dire la longueur qu'on veut voir affichée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i = 0; i < 5 ; i++)
    {
        /* remplacement de %x par %08x*/
        printf("%08x", sha.Message_Digest[i]);
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Génial !


    Oui, il faut aussi lui dire la longueur qu'on veut voir affichée

    Merci mabu


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%08x", sha.Message_Digest[i]);
    est exactement la bonne réponse !!!!


    Excellent ! Encore merci pour vos réponses rapides est précises

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Encore une chose s'il vous plait,

    Comment pourriez vous déposer le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%08x", sha.Message_Digest[i]);
    Dans un tableau de 40 cases au lieu de l'afficher ?

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    sprintf est là pour ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char tableau_de_40_cases[40 + 1];
    for(i = 0; i < 5 ; i++)
    {
        sprintf(tableau_de_40_cases + i * 8, "%08x", sha.Message_Digest[i]);
    }

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Perfecttttt !!!!

  10. #10
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Dans la version de mabu, les chaines sont concaténées, donc mises les unes à la suite des autres sans séparation. Seule la chaine totale de 40 caractères est terminée par '\0', ce qui rend ensuite la manipulation (éventuelle) de chaque chaine de 8 caractères délicate.

    Si tu veux avoir ensuite un accès séparé aux différentes chaines stockées, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char tableau_de_5_tableaux_de_8_cases[5][8 + 1];
    for(i = 0; i < 5 ; i++)
    {
        sprintf(tableau_de_5_tableaux_de_8_cases[i], "%08x", sha.Message_Digest[i]);
    }
    et tu auras accès à chaque chaine par tableau_de_5_tableaux_de_8_cases[i].

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Si tu veux avoir ensuite un accès séparé aux différentes chaines stockées
    Merci bien Diogene, mais mabu à répondu à ma recherche car je ne souhaite plus exploiter les données par bloque par la suite.


    Mon problème est résolu


    Merci à tous

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Attention, un tel code peut poser des problèmes d'endianness...
    D'ailleurs, je suis surpris qu'il n'en pose pas déjà, sur un PC...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Attention, un tel code peut poser des problèmes d'endianness...
    D'ailleurs, je suis surpris qu'il n'en pose pas déjà, sur un PC...
    Que voulez vous dire par endianness ? Pourriez vous etre plus explicite ?

  14. #14
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Citation Envoyé par jack_x4 Voir le message
    Que voulez vous dire par endianness ? Pourriez vous etre plus explicite ?
    Suivant le type de processeur les données en mémoire peuvent être dans un sens ou dans un autre ce qui peut poser des problèmes de traitement ou d'affichage de ces mêmes données.

    Le mieux est de ne jamais présupposer le type d'endianness du processeur sous-jacent mais d'écrire du code "CPU-agnostic".

    cf. article sur wiki (fr) : http://fr.wikipedia.org/wiki/Endianness

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Neista

    Suivant le type de processeur les données en mémoire peuvent être dans un sens ou dans un autre ce qui peut poser des problèmes de traitement ou d'affichage de ces mêmes données.

    Le mieux est de ne jamais présupposer le type d'endianness du processeur sous-jacent mais d'écrire du code "CPU-agnostic".

    Que proposez-vous pour éviter ce ganre de problème ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Bug VBA : conversion .txt en .xlsx - Excel redémarre
    Par Tes_teuse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/05/2015, 00h10
  2. Bugs fix de version 8.2 à 8.5
    Par _rsk_ dans le forum W4 Express
    Réponses: 5
    Dernier message: 14/10/2011, 11h16

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