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 :

implémentation algorithme XOR


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut implémentation algorithme XOR
    Bonjour,

    Je me suis mis à implémenter l'algorithme XOR.
    Quand j'ai fais mes algos, je n'ai pas pensé au fait qu'un caractère pouvait être transformé en caractère EOF qui vaut je crois -1 sous Windows.
    Une fois le fichier crypté, le résultat est enregistré dans un fichier texte ainsi que la clé de cryptage.

    Or si dans l'un ou dans les deux fichiers, un caractère est changé en EOF avant la fin réelle du fichier, ils deviennent donc tronqués au décryptage et celui ci est incomplet.

    En gros ce que je fais:
    Je récupère le fichier à crypter dans un string.
    Je convertis en binaire signé chaque caractère de la string.
    J'applique une clé xor de la taille de l'ensemble de la string convertis en binaire signé.
    Je convertis en caractères les binaires signés "xoré" et la clé.
    J'enregistre la clé et le résultat du cryptage dans un fichier texte.

    Quelqu'un a t-il une idée pour remédier à cela ?
    Sinon je pourrais coller dans les fichier textes le code binaire des char au lieu du char lui même mais bon cela occupe 8*plus de place et çela procure moins d'effet qu'un ramassis de caractères imbitable.

    Je mets le code source en PJ si quelqu'un souhaite regarder.
    Projet codeblocks complié sous windaub.

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    EOF équivaut généralement à (int)-1 et n'est pas inscrit dans le fichier ou le flux.
    EOF est juste une valeur que retourne les fonctions de lecture pour signaler la fin du fichier (ou une erreur).

    Je ne penses donc pas que ton problème vienne de là.

    Au cas où tu peux toujours faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int caractere;
    char caractereAEcrire = (char)caractere;

  3. #3
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Ok merci pour ta réponse.
    J'ai remarqué cependant que fscanf s'arrête d'enregistrer le fichier en mémoire lorsqu'il tombe sur ce caractère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    )ZÁÇûm—ici}èÉR_,â…)-¤¡öãȹ?Ô¿mECI•ËÉwL*ˆªý*ó³
    Il y a "ici" un caractère que je vois dans le fichier texte, mais une fois copié ici, on ne le voit plus. Cependant, quand on passe à la flêche, il faut appuyer deux fois pour passer au caractère suivant, ce qui prouve bien qu'il y a bien un caractère.

    On peut le voir sur l'image ci dessous :



    Dans ce cas là, le fichier s'arrête au deuxième caractère (le carré).

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Il faudrait ouvrir ton fichier avec un éditeur de texte pouvant afficher l'hexadécimal pour voir la valeur de ce caractère.
    Peut-être est-ce un EOT (End Of Transmission) que fscanf interprète (?).
    Mais pour lire un fichier binaire, n'oublie pas de l'ouvrir avec l'option "b" lors du fopen (cf man fopen) pour la compatibilité.
    Et je n'ai pas vu comment tu utilise fscanf, mais peut-être serait-il préférable d'utiliser un fread ?

  5. #5
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    char *file_to_string_1( const char *p )
    {
        char c;
        unsigned long long int i = 0;
        char *s = allocate_1D_c( file_length(p)+1 );
        FILE *f = file_open(p,"r");
        while( fscanf(f,"%c",&c) != EOF )
        {
            s[i] = c;
            i++;
        }
        file_close(f);
        return s;
    }
    J'y ai pensé mais fread s'arrête quand il tombe sur EOF aussi ?
    Ca ne va pas régler le problème ?!


  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    fread ne peut pas tomber sur EOF car EOF n'est pas présent dans un fichier.

    Sinon, je pense qu'un fgetc serait bien plus approprié qu'un fscanf(f, "%c", &c).
    Comme tu sembles être sous windows, ouvre bien ton fichier avec FILE *f = file_open(p,"rb");

  7. #7
    Membre éclairé Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Par défaut "rb"
    Si tu ouvres un fichier qui n'est pas du texte, sous Windows, avec l'option "r", alors la lecture sera faussée de nombreuses manières y compris quant à la fin du fichier.
    Je te conseille d'ouvrir le fichier en lecture non textuelle, soit "rb" ...

    Edit : Argggh ! Neckara a publié plus vite !

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    J'y ai pensé mais fread s'arrête quand il tombe sur EOF aussi ?
    Ca ne va pas régler le problème ?!
    Salut
    fread() est plus adapté à la lecture d'informations "en vrac" (comme c'est le cas d'un flux crypté) que fscanf() adapté, lui, à la lecture de flux texte "formaté" (comme pourrait l'être un CSV par exemple).

    fread() renvoyant le nombre d'éléments réellement lus, tu peux détecter la fin de fichier quand ce nombre renvoyé est inférieur au nombre d'éléments demandés...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. implémentation algorithme ID3
    Par Nayra dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 30/11/2010, 09h50
  2. Cryptographie algorithme XOR
    Par KaNDeL dans le forum Débuter
    Réponses: 5
    Dernier message: 29/09/2009, 17h56
  3. probleme implémentation algorithme FFT
    Par philo69 dans le forum C
    Réponses: 15
    Dernier message: 08/05/2007, 17h33
  4. Algorithme XOR - Bogue
    Par Invité dans le forum C
    Réponses: 17
    Dernier message: 31/10/2006, 19h42
  5. [Algorithme]XOR
    Par zitoun dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/11/2005, 09h11

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