Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de cryptage

    27 février 2006 à 14:36:29

    Voila, j'avais envie de réaliser un petit programme permettant de lire dans un fichier texte, et de renvoyer dans un deuxieme fichier le même texte mais crypté.
    Pour réaliser ceci, je me suis servis du codage de Vengerère(Je pense que ca n'intervient pas dans mon probleme).

    Voila, je décide d'esayer mon programme en cour de fabrication (je n'y ai integré que les minuscules pour le moment (pas de majuscules ni de caractères spéciaux).
    Je lance donc mon petit programme. J'ouvre alors le fichier dans lequel devait se trouver le resultat de mon cryptage et la ! ! !
    Le programme, au lieu de crypter ca en caractères occidentaux, me renvoit des Kanjis(caracteres orientaux).

    Je vous file le code. C'est loin d'être fini mais vous pouvez le compiler et essayer. Je me demande si ca vient pas du fait que les caracteres orientaux sont installés chez moi.

    Voila le code du main

    Citation : Pas de titre

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




    int main(int argc, char *argv[])
    {
    FILE* fichier = NULL;
    FILE* resultat = NULL;
    char clef[100];
    char caractereActuel = 0;
    long nbCarClef = 0, clefEnCour = 0;

    printf("Entrez votre clef de cyptage\n");
    scanf("%s", clef);

    nbCarClef= Ncdecaractere(clef);
    fichier = fopen("texte.txt", "r+");


    if (fichier != NULL)
    {
    resultat = fopen("resultat.txt", "a");
    do
    {
    long numCarClefEnCour = 0, nbAbsCar = 0, numCrypt = 0;

    if(clefEnCour > nbCarClef -1)
    {
    clefEnCour = clefEnCour - nbCarClef;/*on reporte la position de lecture
    de la clef de cryptage si il dépasse
    le nombre de caractere de la clef*/

    }



    numCarClefEnCour = clef[clefEnCour];/*On donne le numéro du caractere en cour de la
    clef de criptage*/

    caractereActuel = fgetc(fichier);/*On lit le fichier caractere par caractere*/


    /*Apres la lecture, il faut ressortir le long correspondant au nombre du caractere lu
    Il correspond a la valeur de caractereActuel*/

    if (96 < caractereActuel < 123)
    {
    nbAbsCar = caractereActuel - 97;
    numCrypt = numCarClefEnCour + nbAbsCar;

    if (numCrypt > 122)
    {
    numCrypt = numCrypt - 26;

    }
    /*On va donner l'ordre d'écrire ca a la fin du fichier resultat*/

    fprintf(resultat, "%c", numCrypt);


    }



    clefEnCour++;

    }while(caractereActuel != EOF);

    fclose (resultat);
    fclose (fichier);
    }


    system("PAUSE");
    return 0;
    }



    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      27 février 2006 à 15:43:35

      Je me trompe peutètre, mais c'est peutètre simplement des caractères ASCII que tu ne voit jamais, du style '\250' ?
      • Partager sur Facebook
      • Partager sur Twitter
        27 février 2006 à 15:49:45

        bah je sais pas, je planche toujours dessus et ca marche pas.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          27 février 2006 à 16:01:32

          Sa ne décrypte pas? *Désoler je ne peut pas tester ton code*
          • Partager sur Facebook
          • Partager sur Twitter
            27 février 2006 à 16:16:56

            Déja, tu devrais utiliser la balise code, et pas la balise citation.

            Ensuite, c'est surement ce bout là qui merde :

            if (96 < caractereActuel < 123)
            {
            nbAbsCar = caractereActuel - 97;
            numCrypt = numCarClefEnCour + nbAbsCar;

            if (numCrypt > 122)
            {
            numCrypt = numCrypt - 26;

            }
            /*On va donner l'ordre d'écrire ca a la fin du fichier resultat*/

            fprintf(resultat, "%c", numCrypt);


            }


            Voici une version un peu plus "logique" :

            if ('a' <= caractereActuel <= 'z')
            {
               nbAbsCar = caractereActuel - 'a';
               numCrypt = numCarClefEnCour + nbAbsCar;
            }
            /*On va donner l'ordre d'écrire ca a la fin du fichier resultat*/

            fprintf(resultat, "%c", numCrypt);
            }


            Après j'ai pas compris le code dans son ensemble (ya pas d'indentation (http://fr.wikipedia.org/wiki/Indentation#Informatique) donc j'ai pas le courage d'essayer de déchiffrer), et je sais pas si ton code est bon.
            Moi je sais qu'il faut pas écrire 97 quand on veut dire 'a', ou 122 quand on veut dire 'z', parce qu'après c'est illisible.
            • Partager sur Facebook
            • Partager sur Twitter
              27 février 2006 à 17:31:19

              Merci bien Bluestorm. En fait, ca venait de l'écriture dans le fichier directement. j'avais mis a+. La maintenant ca marche impeccable.

              Pour le 'a', je savais pas. ^^

              Ca fait une semaine que je commence a programmer, j'y connaissais rien avant. je me suis donc lancé un petit defis ;)

              • Partager sur Facebook
              • Partager sur Twitter
                27 février 2006 à 18:06:01

                Salut,

                Quand tu veux faire un test, par exemple "le chiffre doit être compris entre 50 et 100", il faut écrire :
                if (50 < a && a < 100)

                et non pas
                if (50 < a < 100)

                ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  27 février 2006 à 19:14:45

                  Voila, j'ai fini le programme. Ca a l'air de marccher. Faut que je vois si je peux pas améliorer tout ca parce que la on ne peut pas selectionner les fichier a traduire.
                  On est obligé de copier les textes a crypter dans le repertoire et les nommer de facon spéciale.
                  De même le resultat est donné dans d'autres fichiers.

                  Mais bon...ca crypte, ca décrypte ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    27 février 2006 à 23:10:41

                    Tu peut utiliser pour sa argv et argc :
                    argv contien le nombre de paramêtre passer au programme(prog.exe param1 param2).
                    argv[0] c'est le nom du programme.(c:/.../prog.exe par exemple)
                    Donc, tu peut faire un :
                    if(argc != 3)
                    {
                      printf("Entrez le nom du fichier d'entrée et de sortie");
                      exit(1);
                    }

                    et utiliser argv[1] et argv[2].
                    Apprès tu peut aller plus loin et rajouter -f, -o, -h...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 février 2006 à 23:40:59

                      Le plus simple, c'est d'utiliser les redirections d'entrée/sortie : tu codes tout ton truc avec des lectures sur l'entrée standard et l'écriture sur la sortie standard, et ensuite <code type="console>./monprog.exe < in.txt > out.txt</code> va lancer monprog.exe, en lisant dans in.txt et écrivant dans out.txt.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        27 février 2006 à 23:57:40

                        Sa fonctione sous window et sous linux ceci?
                        (Il y avais une histoire similaire dans un tuto pour le c#)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 février 2006 à 20:12:11

                          je crois bien que ca fonctionne sous windows aussi, oui.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Probleme de cryptage

                          × 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