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 :

MD5, convertion hexa en char/string


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Par défaut MD5, convertion hexa en char/string
    Bonjour,

    Après moultes recherches infructueuses je fais appel à votre connaissance en C !

    J'utilise la fonction MD5 (openssl/md5), j'ai le mot de passe dans une chaine de caractère et un salt dans une autre chaine de caractère mais au format hexadécimal (ex "0756").
    Je souhaite obtenir le MD5 du salt et du mot de passe.
    Comment faire sachant que j'ai des data en HEX et en CHAR. Convertir le salt en char ? c'est possible avec "07" par exemple ?

    Une idée ?

    merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Par défaut
    Citation Envoyé par mindofbuild Voir le message
    Comment faire sachant que j'ai des data en HEX et en CHAR. Convertir le salt en char ? c'est possible avec "07" par exemple ?
    Je ne connais pas MD5, mais concernant la conversion hexa en char, c'est possible, mais attention, un char est codé sur 1 octet et est signé par défaut, donc ça ne dépassera pas 127 ... tu peux par contre convertir un couple de chiffres en hexa sous un unsigned char.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Par défaut
    ok, merci, c'est ce que j'ai fais.
    Par contre, je ne vois pas trop comment remettre la conversion dans mon pointeur original.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    unsigned char *salt = "0756";
    char s1[2], s2[2];
    strncpy (s1, salt, 2); strncpy (s2, salt+2, 2);
    int tmp = strtol(s1, NULL, 16); int tmp2 = strtol(s2, NULL, 16);
    s1 et s2 (des int) contiennent maintenant les 2 lettres ascii.

    Comment mettre la concaténation des 2 dans *salt ou dans un autre pointeur ?

  4. #4
    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
    Je ne suis pas sûr de savoir ce que tu veux.
    Ce que je sais, c'est que tu ne pourras pas mettre quoi que ce soit dans salt défini par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char *salt = "0756";
    le tableau commençant en salt est non modifiable.

    Si il s'agit de transformer chaque couple de caractères d'un tableau, dans ton exemple ('0','7') et ('5','6') en la valeur hexa correspondante, ici 0x07 et 0x56, et de les mettre dans un tableau de unsigned char, {0x07, 0x56}, on peut envisager par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    unsigned char salt[] = "ab87d"; //Il faut un tableau si on veut le modifier
    unsigned int d ;
    int i = 0;
    int len = strlen(salt);
    int impair = len%2;            // si le nombre de caractères est toujours pair
    if(impair)                     // le code se simplifie :
    {                              // - Supprimer ce code commenté
      sscanf(salt, "%1x", &d);     // ...
      salt[0] =  d;                // ...
    }                              // - Faire impair==0 dans la suite (et i<len/2 suffit)
    for(i=impair;i<(len+1)/2 ;i++)  
    {
      sscanf(salt+2*i-impair,"%2x", &d);
      salt[i] =  d;
    }
    // i est le nombre de valeurs inscrites dans salt
    // ici i = 3 et salt[]= {0xa, 0xb8, 0x7d,'7','d','\0'}

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Par défaut
    merci diogene,

    j'ai utilisé sprintf et strcat avec des variables intermédiaires, c'est pas ce qu'il y a de plus "propre" mais ca fonctionne.

    problème résolu, merci.

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

Discussions similaires

  1. Affichage hexa d'une chaîne de char (string)
    Par cs_ntd dans le forum C++
    Réponses: 7
    Dernier message: 25/07/2010, 11h35
  2. convertion char* --> String
    Par chester119 dans le forum C++/CLI
    Réponses: 6
    Dernier message: 24/03/2009, 12h45
  3. Convertion Hexa to déci en C
    Par duranton dans le forum C
    Réponses: 3
    Dernier message: 27/10/2005, 19h42
  4. Réponses: 3
    Dernier message: 26/05/2004, 23h03

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