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 :

problème avec l'utilisation de SHA1 dans une fonction


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 74
    Points : 56
    Points
    56
    Par défaut problème avec l'utilisation de SHA1 dans une fonction
    salut tout le monde,

    j'utilise la fonction SHA1 de l'openssl pour générer des hash à des fichier. dans le main je fait appel a la fonction traitement_sha1(filename); definie comme suite:

    void traitement_sha1(char * filename){
    u_char * sha1_key=NULL;
    char * hexa_key=NULL;

    sha1_key=sha1_of_file(filename);
    hexa_key=sha2hexa(sha1_key);
    printf("le Hash calcule = %s\n",hexa_key);
    }

    avec:
    u_char * sha1_of_file(const char * path){

    strfromfile *sff;
    u_char *key;

    /*recuperer la taille et le contenu du fichier specifie dans path*/
    sff=get_str_from_file(path);
    if(sff<=0) return 0;
    /*calcul et retour du hash correspondant au fichier*/
    if(SHA1(sff->buffer,sff->len,key)==NULL) return 0;
    return key;

    }
    et

    char * sha2hexa(u_char *key){
    int i;
    char *clef;

    clef=(char *) malloc(SHA_DIGEST_LENGTH);
    if(clef==NULL) return NULL;
    for (i = 0; i < SHA_DIGEST_LENGTH; ++i)
    sprintf(clef + i * 2, "%02x", key[i]);

    return clef;
    }

    le problème c'est que le hash est affiché suivé d'une erreur de segmentation.ce que je ne comprends pas est que si j'utilise l'ensemble de ces instruction dans un seul bloc( c-à-d sans fonction, directement dans le main) ça marche bien.
    je n'arrive pas à trouver de solutions.
    merci d'avance.

  2. #2
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par sofiane80 Voir le message
    char * sha2hexa(u_char *key){
    int i;
    char *clef;

    clef=(char *) malloc(SHA_DIGEST_LENGTH);
    if(clef==NULL) return NULL;
    for (i = 0; i < SHA_DIGEST_LENGTH; ++i)
    sprintf(clef + i * 2, "%02x", key[i]);

    return clef;
    }
    tu alloues dans clef un buffer de taille SHA_DIGEST_LENGTH octets.
    tu ecrits dans clé (2 * SHA_DIGEST_LENGTH) + 1 caractères. Cela peut et doit "coincer" à un moment.

    Comme tu veux écrire SHA_DIGEST_LENGTH groupes de 2 caractères, il faut allouer (SHA_DIGEST_LENGTH * 2) + 1 caractères (le +1, c'est pour le 0 terminal ajouté systématiquement par sprintf)
    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
    .

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 74
    Points : 56
    Points
    56
    Par défaut
    tu as tout a fais raison mais mon problème ne venait pas de là (toutes ces erreurs je les ai courrigés hier) .
    l'erreur fatalle dans mon code (d'ailleurs j'ai honte) est que je n'allouais pas de la memoire pour key avant l'appel de (SHA1(sff->buffer,sff->len,key).

    ps: mais pour quoi j'obtenais le bon resultat alors que je n'allouais pas de la memoire.

    merci ram pour tes remarques;

  4. #4
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    J'ajouterais, qu'en C, contrairement à C++, on ne caste pas le retour de malloc().
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

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

Discussions similaires

  1. Problème avec if .. else if.. else dans une fonction
    Par marwa21 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/04/2011, 10h37
  2. Problème avec la gestion des fichier dans une JList()
    Par chebmo1986 dans le forum Composants
    Réponses: 3
    Dernier message: 18/02/2009, 23h49
  3. Réponses: 4
    Dernier message: 04/09/2008, 11h32
  4. problème avec les sauts de ligne dans une string
    Par hexdoc dans le forum Langage
    Réponses: 6
    Dernier message: 02/05/2008, 15h28
  5. Problème avec ma méthode de recherche dans une JList
    Par nicofromChina dans le forum Composants
    Réponses: 4
    Dernier message: 24/07/2007, 10h33

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