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 :

Hexadécimal et fichier


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Hexadécimal et fichier
    Bonjour à tous,

    Je dois modifier un script qui permet de crypter une url. Actuellement la clef de cryptage est en dure dans la source:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char key[] = "\x58\x6d\xfc\x9c\x34\x91\x9b\x86\x3f\xfd\x64\x63\xc9\x13\x4a\x26\xba\x29\x74\x1e\xc7\xe9\x80\x79";
    ...
     
     /* appel a la fonction de codage pour calcul du hmac a partir de l'url */
        HMacCalcul((unsigned char *) key, (unsigned char *) url, strlen(url), (unsigned char *) Hmac);
    et ça fonctionne très bien!

    hors pour un besoin spécifique cette clef doit être dans un fichier en dehors du programme. J'ai donc procédé de la sorte:

    1) J'ai créé un fichier key.txt contenant la ligne suivante \x58\x6d\xfc\x9c\x34\x91\x9b\x86\x3f\xfd\x64\x63\xc9\x13\x4a\x26\xba\x29\x74\x1e\xc7\xe9\x80\x79

    2) J'ai ajouté dans le code:

    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
    18
    19
    20
    21
    22
     
     
    char key[96];
     
    fic = fopen("key.txt", "r");
     
     
        if(fic == NULL){
          doError("Impossible de lire la clef");
        }
        else{
     
         fscanf(fic, "%s", key);
         fclose(fic);
     
         fclose(fic2);
     
        }
    ...
     
     /* appel a la fonction de codage pour calcul du hmac a partir de l'url */
        HMacCalcul((unsigned char *) key, (unsigned char *) url, strlen(url), (unsigned char *) Hmac);
    et ça marche pas

    Avez-vous une solution pour "hydrater" une variable avec de l'hexadécimale à a partir d'un fichier.

    Merci d'avance

  2. #2
    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
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Quand tu écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char key[] = "\x58\x6d\xfc\x9c\x34\x91\x9b\x86\x3f\xfd\x64\x63\xc9\x13\x4a\x26\xba\x29\x74\x1e\xc7\xe9\x80\x79";
    Le compilateur créer un tableau binaire contenant les octets 0x58, 0x6d, 0xfc, etc.

    Quand tu lis un fichier avec la chaine de caractères "\x58\x6d\xfc...", tu lis en fais les octets suivant: 0x5c, 0x78, 0x35, x38, etc. ('\', 'x', '5', '8', ...)

    Deux solutions:

    1) Tu écris une routine de conversion "chaine de caractères hexadécimale avec backslash x" -> hexadécimal (binaire). [solution intermédiaire: enlever les "\x" pour ne garder que les chiffres, ça sera toujours plus simple à convertir].

    2) Tu sauvegardes / lis ton fichier en binaire.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci Neitsa,

    Tes explications sont claires. Je vais tester tes solutions et je te tiendrais au courant.

    Encore merci

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Super ça a fonctionné grâce à tes explications. J'ai procédé de la sorte:

    1) création d'un petit programme pour mettre la clef au format binaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
     
    int main()
    {
    	    char key[] = "\x58\x6d\xfc\x9c\x34\x91\x9b\x86\x3f\xfd\x64\x63\xc9\x13\x4a\x26\xba\x29\x74\x1e\xc7\xe9\x80\x79";
    	    FILE *fp = fopen("keybin", "wb");
     
    	    fwrite(key, 1, sizeof(key), fp); 
                fclose(fp);
    	    return 0;
    }
    2) Lecture du fichier pour hydrater la variable

    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
     fic = fopen("keybin", "rb");
     
     
        if(fic == NULL){
          doError("Impossible de lire la clef");
        }
        else{
     
         // obtenir la taille
         fseek (fic , 0 , SEEK_END);
         lSize = ftell (fic);
         rewind (fic);
     
         fread(key, 1, lSize, fic);
         fclose(fic);
     
        }

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

Discussions similaires

  1. conversion d'une image en fichier hexadécimal
    Par titi ten dans le forum C++
    Réponses: 9
    Dernier message: 31/03/2015, 14h47
  2. Comment lire un fichier hexadécimal avec MPLAB
    Par takfa2008 dans le forum MPLAB
    Réponses: 1
    Dernier message: 04/12/2011, 12h06
  3. Éditer un fichier en hexadécimal
    Par castelom dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/03/2009, 23h14
  4. Réponses: 18
    Dernier message: 14/11/2007, 22h39
  5. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 09h38

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