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

Réseau C Discussion :

Probéme systeme de cryptage XOR


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Par défaut Probéme systeme de cryptage XOR
    Bonjour voila je m'intresse beaucoup beaucoup à la cryptographie sur l'operateur XOR, j'ai compris la theorie mais ensuite pour le mettre en pratique sur un programme C. Voila, je n'arrive pas du tout a crypter le contenu d'un fichier choisi je ne sais la procedure en (C) à faire j'ai essayé mais voila le resultat:

    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
    23
    24
    25
    26
    27
    28
    29
    30
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    int main(void)
    {
    	FILE *fichier;
    	int clef;
    	char crypt[300];
    	char file[30];
     
    	printf("Choisissez le fichier a crypter:\t");
    	scanf("%s",file);
    	printf("Entrer votre clef de cryptage(numerique):\t");
    	scanf("%d",clef);
     
    	while(1)
            {
                    char ch;
                    int xor;
                    int i=0;
     
                    xor[i] = ch[i] ^ clef;
                    printf("%s",xor);
                    fputs(xor,file);
             }
     
              getch();
    }
    Voila mais bon le code ne run pas du tout.

    Merci beaucoup de votre aide

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    +++ Médinoc compiler v1.0 +++
    1. Les fonctions de conio.h ne servent pas à grand-chose, ici, tu sais... Tu développes sous Dev-C++ ?
    2. Utilisation de scanf("%s"), l'une des deux pires usages possibles de scanf(). Utiliser fgets() et se débarrasser ensuite du \n en trop.
    3. Oubli du & dans l'utilisation de scanf("%d");
    4. Oubli d'ouverture du fichier.
    5. Usage de valeurs entières (ch et xor) comme des tableaux alors que ce n'en sont pas.
    6. Affichage d'un entier en tant que chaîne (printf("%s").
    7. Écriture d'un entier en tant que chaîne (fputs)
    8. Oubli de fermeture du fichier.

    +++ Echec de compilation. Code source très incorrect. +++
    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.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Par défaut
    T'es bien gentil merci beaucoup mais si ça serai possible de m'aider et pas me juger STP j'essaie d'apprendre mais si le forum est destiné au Elite fallais le dire avant.

    Merci

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    Je t'ai indiqué tes erreurs : La première chose à faire est de tenter de les corriger. Ici, on ne pond pas du code tout fait.
    Si tu n'arrives pas à les corriger, on t'aidera un peu plus. Si tu n'essaies pas de les corriger, nul tu resteras.
    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.

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Salut,

    En plus des erreurs soulevées par Médinoc et la gestion très approximatives des entrées-sorties (une recherche sur le forum te permettra de trouver des solutions robustes à ces problèmes), ton code contient également des erreurs algorthmiques, et notamment:
    • ta boucle while s'exécute indéfiniment (aucune condition de sortie n'est prévue).
    • la variable i n'est par jamais incrémentée, et d'autre part, elle est initialisée à 0 dans le corps de la boucle.


    Enfin, comme l'a dit Médinoc, les variables ch et xor ne sont pas des tableaux. Il ne sert donc à rien d'itérer dessus.

    Citation Envoyé par raphy75
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	while(1)
            {
                    char ch;
                    int xor;
                    int i=0;
     
                    xor[i] = ch[i] ^ clef;
                    printf("%s",xor);
                    fputs(xor,file);
             }
    Pourrais-tu poster l'algorithme que tu désires implanter? Salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Par défaut
    Comme je l'ai dis je suis initié en cryptographie en faite mon probléme c'est que je ne sais comment ça se passe, je me suis beaucoup renseigné à propos de l'operateur XOR mais je ne savais pas qu'il fallait faire un algorithme avant de coder le programme dsl
    Si ça serait possible d'une petite explication histoire de me mettre sur le droit chemain à propos de l'importance de l'algorithme...

    Heu je voulais m'excuser de mon insolence ,Médinoc je suis en train de chercher mes erreurs mais pas trop evident, voila j'ai seulement reussit à faire ç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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    void cryptage()
    {
            int i;
            char mot[300];
            char crypt[300];
            int clef;
            char fic[20];
            FILE *fichier;
     
            printf("Texte crypte:\t");
            fgets("%s",mot);
            printf("Entrer clef(numerique:\t");
            fgets("%d",&clef);
     
            for (i=0;i<strlen(mot);i++)
            {
                    crypt[i]=mot[i] ^ clef;
            }
     
            printf("Texte crypte: %s\n",crypt);
            fichier=fopen("cryptage.txt","w");
            fputs(crypt,fichier);
            fclose(fichier);
    }
    int main(void)
    {
            cryptage();
            getch();
    }
    le probléme c'est que :
    1. Je veux crypter le contenu d'un fichier mais je ne sais quelle manoeuvre en (C) pour parcourir le contenu d'un fichier
    2. Je veux décrypter (mais ça j'aimerais essayer de le faire seul j'ai une petite idée j'ai bien analysé la table de verité)

    Ben voila et merci beaucoup de votre aide

  7. #7
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Pour les fichiers , tout est très bien expliqué ici

  8. #8
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    voilà j'ai un peu amélioré 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    void cryptage()
    {
            int i;
            char mot[300];
            char crypt[300];
            int clef;
            char fic[20];
            FILE *fichier;
     
            printf("Texte crypte:\t");
            fgets(mot, 300, stdin);
            printf("Entrer clef(numerique:\t");
            scanf("%d",&clef);
     
            for (i=0; mot[i] != 0 ;i++)
            {
                    crypt[i]=mot[i] ^ clef;
            }
     
            printf("Texte crypte: %s\n",crypt);
            fichier=fopen("cryptage.txt","w");
            fputs(crypt,fichier);
            fclose(fichier);
    }
    int main(void)
    {
            cryptage();
            getch();
    }
    Notamment fgets était mal utilisé.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Par défaut
    Citation Envoyé par raphy75
    Comme je l'ai dis je suis initié en cryptographie en faite mon probléme c'est que je ne sais comment ça se passe, je me suis beaucoup renseigné à propos de l'operateur XOR mais je ne savais pas qu'il fallait faire un algorithme avant de coder le programme dsl
    Si ça serait possible d'une petite explication histoire de me mettre sur le droit chemain à propos de l'importance de l'algorithme...
    Pour chiffrer (ou crypter) un fichier tu as deux possibilités en cryptographie :
    - la crypto asymétrique
    - la crypto symétrique
    L'un utilisant deux clefs différentes (une privée, une publique), l'autre utilisant une seule et une clef (la clef secrète).
    Pour ces deux méthodes de chiffrement il existe plusieurs algos. Parmi eux RSA (asym), AES, DES, RC4 (sym). (ceci est une liste non exhaustive bien entendu).
    Ton problème ici est de choisir un de ces algos et celui dont tu parles (XOR) m'est inconnu. Je sais que XOR est juste une opération logique bit à bit entre deux nombres. Beaucoup d'algos de chifrment utilisent cet opérateur mais il n'est pas, à ma connaissance, un algo de chiffrement à lui tout seul (ou bien très faible ).

    Si tu veux chiffrer un fichier, tu dois donc commencer par te demander quel genre de chiffrement tu veux faire (Asym/Sym) et quel algo utiliser suivant tes besoins.
    Une fois ces choses définies il ne te reste plus qu'à trouver la biliothèque C (vu que tu postes ici) adaptée pour appeler cet algo implémenté car je te déconseille vivement de tenter de l'implémenter toi-même pour la bonne raison que ça a été forcément déjà fait et qui plus est très bien fait !

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Par défaut
    A oui je vois mais attends frizou11 quand tu dis :

    Une fois ces choses définies il ne te reste plus qu'à trouver la biliothèque C (vu que tu postes ici) adaptée pour appeler cet algo implémenté car je te déconseille vivement de tenter de l'implémenter toi-même pour la bonne raison que ça a été forcément déjà fait et qui plus est très bien fait !
    De l'implémenter moi-meme c'est a dire que tu me deconseille que je code moi méme ? que le meilleur a faire est de prendre un programme tout fait mais alors je ne comprends pas ce n'est pas de la "triche" parce que aprés tout le monde en ai capable de faire cela il n'y a aucune difficulté non ?

    Je suis dsl de ne pas etre azzez clair frizou11.

    Merci de ta reponse

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    Je suis de retour.
    Déjà, on va essayer de faire au plus simple, et pour cela on ne va pas utiliser de tableau lors de la lecture du fichier.

    Le mieux est de faire une fonction de cryptage simple, char par char :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* Fonction toute simple qui crypte un fichier ouvert,
       vers un autre fichier ouvert.
       Ici, j'ai repris directement ton algorithme. */
    void CryptageFichiersOuverts(FILE *pfIn, FILE *pfOut, int cle)
    {
    	int carac;
    	while((carac = fgetc(pfIn)) != EOF)
    	{
    		int xored = carac ^ cle;
    		fputc(xored, pfOut);
    	}
    }
    Ensuite, une fonction qui ouvre les fichiers :
    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
    23
    24
    25
    26
    /* Cette fonction est ce qui te manquait, 
       elle fait JUSTE l'ouverture (et la fermeture) des fichiers,
       et appelle la fonction de cryptage. */
    void Cryptage(const char *nomFichSrc, const char *nomFichDest, int cle)
    {
    	FILE *pfIn = fopen(nomFichSrc, "r");
    	if(pfIn == NULL)
    	{
    		puts("Echec d'ouverture du fichier source.");
    	}
    	else
    	{
    		FILE *pfOut = fopen(nomSichDest, "w");
    		if(pfOut == NULL)
    		{
    			puts("Echec d'ouverture du fichier destination.");
    		}
    		else
    		{
    			CryptageFichiersOuverts(pfIn, pfOut, cle);
    			fclose(pfOut);
    		}
     
    		fclose(pfIn);
    	}
    }
    Et dans le main(), on demande les noms des fichiers, la clé et on crypte...
    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.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Par défaut
    Citation Envoyé par raphy75
    De l'implémenter moi-meme c'est a dire que tu me deconseille que je code moi méme ? que le meilleur a faire est de prendre un programme tout fait mais alors je ne comprends pas ce n'est pas de la "triche" parce que aprés tout le monde en ai capable de faire cela il n'y a aucune difficulté non ?
    Tu as deux solutions:
    1. Tu as un algo à toi. Tu l'as bien pensé et écrit soigneusement sur une feuille de papier. Alors il ne te reste plus qu'à l'implémenter (ie le coder) en C ou ce que tu veux.
    2. Tu souhaites faire appel à un algo existant alors tu peux toujours essayer de le re-implémenter mais déjà tente de l'utiliser via une bibliothèque l'ayant déjà implémenté, ce sera déjà un bon pas de fait.

    Le choix du 1. ou du 2. dépend essentiellement de savoir si tu veux un algo de chiffrement sûr et efficace.
    En effet, dans la première solution c'est ton algo sur lequel tout repose et c'est pas que je doute de tes talents de fin cryptologue masi beaucoup s'y sont cassés les dents.
    Tandis que dans la seconde solution, tu utilises un algo bien écrit, bien sûr (ce qui est important en chiffrement ) et tu y fais appel en implémentant ton bout de code qui prend ton fichier en entrée et qui ressort le fichier chiffré e nutilisant l'algo implémenté par une bibliothèque. Ce n'est pas de la triche : tu utilise une fonction implémentée. Si tu appelles ça de la triche alors dès que tu fais un bête printf ou un fopen c'est aussi de la triche vu que ce sont des fonctions implémentées dans une bibliothèque...

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

Discussions similaires

  1. Cryptage XOR en C
    Par tazimovski773 dans le forum C
    Réponses: 4
    Dernier message: 15/07/2014, 13h39
  2. cryptage xor avec clé
    Par deny dans le forum Sécurité
    Réponses: 0
    Dernier message: 29/06/2008, 08h54
  3. Cryptage / decryptage xor
    Par deny dans le forum Débuter
    Réponses: 2
    Dernier message: 08/06/2008, 11h52
  4. Cryptage XOR + clé variable
    Par jusi dans le forum Delphi
    Réponses: 9
    Dernier message: 26/02/2007, 14h49
  5. [delphi 7 perso] Cryptage XOR et assembleur
    Par Loran dans le forum Langage
    Réponses: 5
    Dernier message: 18/08/2005, 10h44

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