diff --git a/prgm/Makefile b/prgm/Makefile index 5abdd7a..029618f 100644 --- a/prgm/Makefile +++ b/prgm/Makefile @@ -1,5 +1,5 @@ -run : codage.o decodage.o code.o generate.o - gcc -o run codage.o decodage.o code.o generate.o +code : codage.o decodage.o code.o generate.o + gcc -o code codage.o decodage.o code.o generate.o codage.o : codage.c gcc -o codage.o -c codage.c @@ -14,4 +14,4 @@ generate.o : generate.c gcc -o generate.o -c generate.c clean : - rm -f *.o + rm -f *.o -f code diff --git a/prgm/cle.txt b/prgm/cle.txt index 70db91d..0831df4 100644 --- a/prgm/cle.txt +++ b/prgm/cle.txt @@ -1 +1 @@ -ixbvhdkevteiludzxvpsnpcp \ No newline at end of file +ewdxtsjgwhkpybfnthzfibqx \ No newline at end of file diff --git a/prgm/codage.c b/prgm/codage.c index 8c4cbf9..8bf604c 100644 --- a/prgm/codage.c +++ b/prgm/codage.c @@ -3,13 +3,6 @@ On ecrit un programme qui à partir d'un fichier message et d'un fichier clé produira un fichier message_code */ - -/* - 1. La méthode la plus simple les noms de fichiers sont connus - 2. On demande le nom des fichiers à l'utilisateur - 3. Les noms de fichiers sont passés en paramètres sur le ligne de commande -*/ - #include #include @@ -24,17 +17,31 @@ int codage(int argc, char *argv[]) { int k1; int calcul; + // Ouverture des fichiers et vérification d'erreurs d'ouverture + char * cheminFic_m = argv[2]; f_m = fopen(cheminFic_m, "r"); - /* Traitement erreur */ - char * cheminFic_k = argv[3]; + if (f_m==NULL) + { + printf("Echec de l'ouverture du fichier.\n"); + } + + char * cheminFic_k = argv[3]; f_k = fopen(cheminFic_k, "r"); - /* Traitement erreur */ + if (f_k==NULL) + { + printf("Echec de l'ouverture du fichier.\n"); + } + char * cheminFic_mc = argv[4]; f_mc = fopen(cheminFic_mc, "w"); - /* Traitement erreur */ - + if (f_mc==NULL) + { + printf("Echec de l'ouverture du fichier.\n"); + } + // Boucle : calcul permettant de coder un caractère puis l'écrire dans le + // fichier f_m while ((c = fgetc(f_m)) != EOF) { k1 = fgetc(f_k); @@ -42,7 +49,7 @@ int codage(int argc, char *argv[]) { fputc(calcul, f_mc); } - + // Fermeture des fichiers fclose(f_m); fclose(f_k); fclose(f_mc); diff --git a/prgm/code.c b/prgm/code.c index be0146b..05af986 100644 --- a/prgm/code.c +++ b/prgm/code.c @@ -1,40 +1,53 @@ #include #include +#include #include "fonctions.h" int main(int argc, char *argv[]) { FILE *f_m, *f_k, *f_mc; /* strcutures permettant, une fois FOPEN exécuté de recupérer des informations pour manipuler les fichiers en C */ - int c, count=0; char * cheminFic_m = argv[2]; + int c,count=0; - f_m = fopen(cheminFic_m, "r"); - if(f_m==NULL) - { - return EXIT_FAILURE; - } - for (c = getc(f_m); c != EOF; c = getc(f_m)) - { - count = count + 1; - } - generate(count, argc, argv); - //fclose(f_m); + + /* recupération sur la ligne de commande des noms de fichiers et option (-c pour + codage, -d pour décodage) : message cle message_calculé - /* recupération sur la ligne de commande des noms de fichiers et option (-c pour codage - -d pour décodage : message cle message_calculé - - code -c f1 f2 f3 - code -d f1 f2 f3 + ./code -c f1 f2 f3 + ./code -d f1 f2 f3 */ - if(argv[1]=="-c") + + // Si l'option donnée en premier argument est "-c", alors on génère une clé + // aléatoirement et on code le message avec + if(strcmp(argv[1], "-c")==0) { + // Parcours le fichier du message à coder pour connaitre le nombre de caractères présents. + f_m = fopen(cheminFic_m, "r"); + if(f_m==NULL) + { + return EXIT_FAILURE; + } + for (c = getc(f_m); c != EOF; c = getc(f_m)) + { + count = count + 1; + } + + // Génère une clé aléatoire + generate(count, argc, argv); + + // Code le message codage(argc, argv); } - else if(argv[1]=="-d") + /* Si l'option donée en premier argument est "-d", alors on décode le message + donné en 2eme argument en mettant le résultat dans un nouveau fichier nommé + en 4eme argument + */ + else if(strcmp(argv[1], "-d")==0) { + // Décode le message codé decodage(argc, argv); } return EXIT_SUCCESS; diff --git a/prgm/decodage.c b/prgm/decodage.c index 7eb80be..fa34e23 100644 --- a/prgm/decodage.c +++ b/prgm/decodage.c @@ -1,3 +1,9 @@ +/* + Decodage du message + On ecrit un programme qui à partir d'un fichier message_code et + d'un fichier clé produira un fichier message_decode +*/ + #include #include @@ -9,24 +15,32 @@ int decodage(int argc, char *argv[]) { int k1; int calcul; + // Ouverture des fichiers et vérification d'erreurs d'ouverture + char * cheminFic_m = argv[2]; f_m = fopen(cheminFic_m, "r"); - if (f_m==NULL){ - printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); + if (f_m==NULL) + { + printf("Echec de l'ouverture du fichier.\n"); } char * cheminFic_k = argv[3]; f_k = fopen(cheminFic_k, "r"); - if (f_k==NULL){ - printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); + if (f_k==NULL) + { + printf("Echec de l'ouverture du fichier.\n"); } char * cheminFic_mdc = argv[4]; f_mdc = fopen(cheminFic_mdc, "w"); - if (f_mdc==NULL){ - printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); + if (f_mdc==NULL) + { + printf("Echec de l'ouverture du fichier.\n"); } + + // Boucle : calcul permettant de decoder un caractère puis l'écrire dans le + // fichier f_mdc while ((c = fgetc(f_m)) != EOF) { k1 = fgetc(f_k); @@ -34,7 +48,7 @@ int decodage(int argc, char *argv[]) { fputc(calcul, f_mdc); } - /*fermeture des fichiers*/ + //fermeture des fichiers fclose(f_m); fclose(f_k); fclose(f_mdc); diff --git a/prgm/generate.c b/prgm/generate.c index 34ee6e3..657e9d5 100644 --- a/prgm/generate.c +++ b/prgm/generate.c @@ -4,7 +4,9 @@ #include #include "fonctions.h" -int generate(int count,int argc,char *argv[]) + + +int generate(int count, int argc,char *argv[]) { FILE *f; char cle[count]; @@ -12,20 +14,30 @@ int generate(int count,int argc,char *argv[]) char characteres[26]="azertyuiopqsdfghjklmwxcvbn"; srand(time(NULL)); - for(a=0;a<(count-2);a++) { /*on fait donc une première boucle*/ + + //Crée la nouvelle clé à partir du nombre de caractères du message + for(a=0;a<(count-2);a++) + { i = rand()%26; cle[a]=characteres[i]; - } - for (a=1;a<3;a++){ + } + + for (a=1;a<3;a++) + { i = rand()%26; cle[count-a]=characteres[i]; - } + } f = fopen (argv[3], "w"); - if (f) { - fwrite (cle, sizeof(char), count, f); - } else { - return EXIT_FAILURE; - } - fclose (f); + + //Ecris la clé précédemmant créée dans le fichier cle.txt par exemple + if (f) + { + fwrite (cle, sizeof(char), count, f); + } + else + { + return EXIT_FAILURE; + } + fclose (f); return EXIT_SUCCESS; } \ No newline at end of file diff --git a/prgm/main.c b/prgm/main.c deleted file mode 100644 index 74425bb..0000000 --- a/prgm/main.c +++ /dev/null @@ -1,148 +0,0 @@ -#include -#include -#include -#include - -int decodage(int argc, char *argv[]) { - FILE *f_m, *f_k, *f_mdc; /* strcutures permettant, une fois FOPEN - exécuté de recupérer des informations pour manipuler les fichiers - en C */ - int c; - int k1; - int calcul; - - char * cheminFic_m = "message.txt"; - f_m = fopen(cheminFic_m, "r"); - if (f_m==NULL){ - printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); - } - - char * cheminFic_k = "cle.txt"; - f_k = fopen(cheminFic_k, "r"); - if (f_k==NULL){ - printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); - } - - char * cheminFic_mdc = "message_dc.txt"; - f_mdc = fopen(cheminFic_mdc, "w"); - if (f_mdc==NULL){ - printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); - } - - while ((c = fgetc(f_m)) != EOF) - /* EOF est une constante obligatoirement - négative (elle vaut -1 sous Linux). */ - { - k1 = fgetc(f_k); /* fgetc lis le caractère à la position courante du flux considéré*/ - calcul = c-k1 >= 0?c-k1:256-(c-k1); /* ?? */ - fputc(calcul, f_mdc); - } - - /*fermeture des fichiers*/ - fclose(f_m); - fclose(f_k); - fclose(f_mdc); - - return EXIT_SUCCESS; - -} - - -int codage(int argc, char *argv[]) { - FILE *f_m, *f_k, *f_mc; /* strcutures permettant, une fois FOPEN - exécuté de recupérer des informations pour manipuler les fichiers - en C */ - int c; - int k1; - int calcul; - - char * cheminFic_m = "message.txt"; - f_m = fopen(cheminFic_m, "r"); - if (f_m==NULL){ - printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); - } - - char * cheminFic_k = "cle.txt"; - f_k = fopen(cheminFic_k, "r"); - if (f_k==NULL){ - printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); - } - - char * cheminFic_mc = "message_c.txt"; - f_mc = fopen(cheminFic_mc, "w"); - if (f_mc==NULL){ - printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); - } - - - while ((c = fgetc(f_m)) != EOF) - /* EOF est une constante qui est obligatoirement - négative (elle vaut -1 sous Linux). */ - { - k1 = fgetc(f_k); - calcul = (c+k1) % 256; /* modulo 256 du caractère qui est entrain d'être lu */ - fputc(calcul, f_mc); /* fputc permet d'écrire un caractère sur le flux de caractères passé en paramètre*/ - } - - - fclose(f_m); - fclose(f_k); - fclose(f_mc); - - return EXIT_SUCCESS; - -} - -int main(int argc, char *argv[]) { - FILE* fp, *fichier; /* strcutures permettant, une fois FOPEN exécuté de recupérer des informations pour manipuler les fichiers en C */ - int c, nbrchar; - char cle[nbrchar]; - int a,place; - char characteres[26]="abcdefghijklmnopqrstuvwxyz"; - srand(time(NULL)); - - fp = fopen("message.txt", "r"); /*ouvre le fichier*/ - if (!fp) { - printf("Could not open file \n"); /*renvoie une erreur si le nom du fichier est incorrect*/ - return 0; - } - - for (c = getc(fp); c != EOF; c = getc(fp)){ /*extrait les caractères du fichiers*/ - // Increment un caractère dans le compteur - nbrchar = nbrchar + 1; - } - - // Close the file - fclose(fp); - - /* !! ATTENTION nbrchar compte 2 caractères de plus que le nombre de caractère visible */ - - for(a=0;a<(nbrchar-2);a++) { /*on fait donc une première boucle*/ - place = rand()%26; - cle[a]=characteres[place]; - } - - for (a=1;a<3;a++){ - place = rand()%26; - cle[nbrchar-a]=characteres[place]; - } - - fichier = fopen ("cle.txt", "wb"); - if (fichier) { - fwrite (cle, sizeof(char), nbrchar, fichier); - } else { - return EXIT_FAILURE; - } - fclose (fichier); - - if (argv[1]=="-c"){ - codage(argc, argv); - } - - else if (argv[1]=="-d"){ - decodage(argc, argv); - } - - - return EXIT_SUCCESS; -} \ No newline at end of file diff --git a/prgm/message.txt b/prgm/message.txt index 139bf2d..91aab4a 100644 --- a/prgm/message.txt +++ b/prgm/message.txt @@ -1 +1 @@ -txt a encoder stp marche \ No newline at end of file +txt a encoder \ No newline at end of file diff --git a/prgm/message_c.txt b/prgm/message_c.txt deleted file mode 100644 index 9ca4fe5..0000000 --- a/prgm/message_c.txt +++ /dev/null @@ -1 +0,0 @@ -֐ϋփ \ No newline at end of file diff --git a/prgm/message_dc.txt b/prgm/message_dc.txt deleted file mode 100644 index 3569017..0000000 --- a/prgm/message_dc.txt +++ /dev/null @@ -1 +0,0 @@ -txt a encoder stp marche non \ No newline at end of file diff --git a/prgm/run b/prgm/run deleted file mode 100755 index d40cb68..0000000 Binary files a/prgm/run and /dev/null differ