diff --git a/prgm/cle.txt b/prgm/cle.txt index f3f221b..70db91d 100644 --- a/prgm/cle.txt +++ b/prgm/cle.txt @@ -1 +1 @@ -azertyuiopqsdfghjklmwxcvbn \ No newline at end of file +ixbvhdkevteiludzxvpsnpcp \ No newline at end of file diff --git a/prgm/codage.c b/prgm/codage.c index e326fd0..8c4cbf9 100644 --- a/prgm/codage.c +++ b/prgm/codage.c @@ -1,56 +1,48 @@ +/* + Codage du message + 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 -#include #include "fonctions.h" 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; - int count; - char cle[100]; - char * cheminFic_m = "message.txt"; - char * cheminFic_k = "cle.txt"; - char * cheminFic_mc = "message_c.txt"; -//1 + char * cheminFic_m = argv[2]; f_m = fopen(cheminFic_m, "r"); - for (c = getc(f_m); c != EOF; c = getc(f_m)) - { - count = count + 1; - } - generate(count); /* Traitement erreur */ - //fclose(f_m); - -//2 - f_k = fopen(cheminFic_k, "wb"); - while (f_k) - { - fwrite(cle, sizeof(char), count, f_k); - } - fclose(f_k); + char * cheminFic_k = argv[3]; f_k = fopen(cheminFic_k, "r"); /* Traitement erreur */ - //fclose(f_k); - -//3 - f_mc = fopen(cheminFic_mc, "wb"); + char * cheminFic_mc = argv[4]; + f_mc = fopen(cheminFic_mc, "w"); /* Traitement erreur */ - //fclose(f_mc); - //f_m = fopen(cheminFic_m, "r"); - //f_k = fopen(cheminFic_k, "r"); - //f_mc = fopen(cheminFic_mc, "wb"); + while ((c = fgetc(f_m)) != EOF) { k1 = fgetc(f_k); calcul = (c+k1) % 256; fputc(calcul, f_mc); } + + fclose(f_m); fclose(f_k); fclose(f_mc); diff --git a/prgm/code.c b/prgm/code.c index a8c1c73..be0146b 100644 --- a/prgm/code.c +++ b/prgm/code.c @@ -6,12 +6,21 @@ 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]; + + 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); - int c; - int k1; - int calcul; - int option; - /* recupération sur la ligne de commande des noms de fichiers et option (-c pour codage -d pour décodage : message cle message_calculé @@ -19,14 +28,14 @@ int main(int argc, char *argv[]) { code -d f1 f2 f3 */ - - if (argv[1]=="-c"){ + if(argv[1]=="-c") + { codage(argc, argv); } - else if (argv[1]=="-d"){ + else if(argv[1]=="-d") + { decodage(argc, argv); } - return EXIT_SUCCESS; } \ No newline at end of file diff --git a/prgm/decodage.c b/prgm/decodage.c index 952179f..7eb80be 100644 --- a/prgm/decodage.c +++ b/prgm/decodage.c @@ -9,24 +9,31 @@ int decodage(int argc, char *argv[]) { int k1; int calcul; - char * cheminFic_m = "message_c.txt"; + 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"); } - char * cheminFic_k = "cle.txt"; + 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"); } - char * cheminFic_mdc = "message_dc.txt"; + 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"); } + while ((c = fgetc(f_m)) != EOF) + { + k1 = fgetc(f_k); + calcul = c-k1 >= 0?c-k1:256-(c-k1); + fputc(calcul, f_mdc); + } + /*fermeture des fichiers*/ fclose(f_m); fclose(f_k); diff --git a/prgm/fonctions.h b/prgm/fonctions.h index 1aab165..d6b0c1e 100644 --- a/prgm/fonctions.h +++ b/prgm/fonctions.h @@ -1,8 +1,8 @@ #ifndef FONCTIONS #define FONCTIONS -int codage(int argc, char* argv[]); -int decodage(int argc, char* argv[]); -int generate(int count); +int codage(int argc, char *argv[]); +int decodage(int argc, char *argv[]); +int generate(int count, int argc, char *argv[]); #endif diff --git a/prgm/generate.c b/prgm/generate.c index 0bee105..34ee6e3 100644 --- a/prgm/generate.c +++ b/prgm/generate.c @@ -1,18 +1,31 @@ #include #include #include +#include #include "fonctions.h" -int generate(int count) +int generate(int count,int argc,char *argv[]) { + FILE *f; char cle[count]; int a,i; char characteres[26]="azertyuiopqsdfghjklmwxcvbn"; srand(time(NULL)); - for(a=0;a +#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 91aab4a..139bf2d 100644 --- a/prgm/message.txt +++ b/prgm/message.txt @@ -1 +1 @@ -txt a encoder \ No newline at end of file +txt a encoder stp marche \ No newline at end of file diff --git a/prgm/message_c.txt b/prgm/message_c.txt index e69de29..9ca4fe5 100644 --- a/prgm/message_c.txt +++ b/prgm/message_c.txt @@ -0,0 +1 @@ +֐ϋփ \ No newline at end of file diff --git a/prgm/message_dc.txt b/prgm/message_dc.txt new file mode 100644 index 0000000..3569017 --- /dev/null +++ b/prgm/message_dc.txt @@ -0,0 +1 @@ +txt a encoder stp marche non \ No newline at end of file diff --git a/prgm/run b/prgm/run index a0efa8c..d40cb68 100755 Binary files a/prgm/run and b/prgm/run differ