Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Programme de cryptage/decryptagr de fichiers

Pourquoi ça ne marche pas comme il faut ?

    20 février 2006 à 14:22:20

    Bonjour, :)
    Après avoir trouvé sur ce forum une idée d'un programme de cryptage par "OU exclusif" ou "XOR" (symbole ^ en C) sur un topic que je ne retrouve plus (merci à celui qui a proposé ça si il passe et désolé de ne pas pouvoir le citer), j'ai décidé de me lancer dans la création d'un tel programme.
    Celui-ci m'a permis de m'exercer un peu sur les fichiers mais il y a des problèmes :
    Je vous laisse tester : en théorie si vous cryptez un texte avec une clef et que vous recryptez le résultat avec la même clef vous retrouvez le texte d'origine mais ce n'est seulement qu'en partie le cas.

    Probleme 1 : Il y a parfois un caractère bizzard genre 'ù' ou '¤' qui vient à la fin du texte décrypté. [RESOLU]

    Probleme 2 : Si un texte de plus d'une 100aine de caracteres par exemple est crypté avec une clef de 7 caractères par exemple alors si on met une clef qui n'a rien à voir lorsque l'on veut décrypter le texte, alors ce sont seulement les 7 premiers caractères qui vont être faux mais le reste sera quand même décodé (ça c'est le truc qui est le plus bizzard, à mon avis ça doit être vers l'endroit où "caractereCryptage" est mis en mémoire à partir du fichier "clef", j'ai essayé de faire un rewind quand le caractere sorti est EOF mais là ça met n'importe quoi pourtant je suis sur qu'il faut faire un truc dans ce genre là car le fait que les autres caracteres se décodent quelque soit la clef est du au fait qu'ils ne sont cryptés non pas avec les caracteres de la clef mais avec EndOfFile) [RESOLU]


    Voici le code source:

    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
            // Ouverture des fichiers
            FILE* fichierACrypter = NULL ;
            FILE* clef = NULL ;
            FILE* fichierCrypte = NULL ;
            int etat = 1;

            fichierACrypter = fopen("Contenu.txt", "r");

            if (fichierACrypter == NULL)
            {
                printf("Impossible d'ouvrir 'Contenu.txt' !\n");
                etat = 0;
            }

            clef = fopen("Clef.txt", "r");

            if (clef == NULL)
            {
                printf("Impossible d'ouvrir 'Clef.txt' !\n");
                etat = 0;
            }

            fichierCrypte = fopen("Cryptogramme.txt", "w");

            if (fichierCrypte == NULL)
            {
                printf("Impossible d'ouvrir 'Cryptogramme.txt' !\n");
                etat = 0;
            }

            if (etat != 0)
            {
                int caractereACrypter = 0;
                int caractereCryptage = 0;
                int caractereCrypte = 0;

                do
                {
                    caractereACrypter = fgetc(fichierACrypter);
                    caractereCryptage = fgetc(clef);

    /* PROBLEME 2 RESOLU : Il fallait rajouter ce petit if */

                    if (caractereCryptage == EOF)
                    {
                        rewind(clef);
                        caractereCryptage = fgetc(clef);
                    }

                    caractereCrypte = caractereACrypter ^ caractereCryptage;
                   
    /* PROBLEME 1 RESOLU : Le contenu de ce if n'était justement pas dans un if */
                    if (caractereACrypter != EOF)
                    {
                        fputc(caractereCrypte, fichierCrypte);
                    }

                } while (caractereACrypter != EOF);
            }
            else
            {
                system("PAUSE");
            }

            return 0;
    }


    Vous devez créer un fichier "contenu.txt" et un fichier "clef.txt" dans le répertoire de l'executable.


    • Partager sur Facebook
    • Partager sur Twitter
      21 février 2006 à 16:16:44

      Désolé de vous déranger encore une fois mais j'ai un nouveau probleme, j'espère que vous pourrez m'aider cette fois ci:

      Y a-t-il un autre moyen de tester la fin d'un fichier que de voir si le caractère sorti est End Of File ? Parceque le probleme c'est que certains caracteres lorsqu'ils sont cryptés prennent visiblement la valeur de End Of File ce qui fait que lorsque je veux relire ces fichiers à l'aide d'une boucle "do { } while (caractere != EOF )" et que l'un des caractere sorti correspond à la valeur EOF, le programme croit qu'il est à la fin du fichier et laisse tomber le reste. Peut-on obliger End Of File a prendre une valeur que l'on veut genre 1000 ou 87000 ? Comment pourrais-je corriger le code source pour que ça marche ?

      Merci de m'aider, toutes vos propositions sont les bienvenues.
      • Partager sur Facebook
      • Partager sur Twitter

      [C] Programme de cryptage/decryptagr de fichiers

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown