Version finale

This commit is contained in:
toussain 2022-12-16 16:59:35 +01:00
parent 6b0eccf294
commit e394f4a01e
11 changed files with 101 additions and 205 deletions

View File

@ -1,5 +1,5 @@
run : codage.o decodage.o code.o generate.o code : codage.o decodage.o code.o generate.o
gcc -o run codage.o decodage.o code.o generate.o gcc -o code codage.o decodage.o code.o generate.o
codage.o : codage.c codage.o : codage.c
gcc -o codage.o -c codage.c gcc -o codage.o -c codage.c
@ -14,4 +14,4 @@ generate.o : generate.c
gcc -o generate.o -c generate.c gcc -o generate.o -c generate.c
clean : clean :
rm -f *.o rm -f *.o -f code

View File

@ -1 +1 @@
ixbvhdkevteiludzxvpsnpcp ewdxtsjgwhkpybfnthzfibqx

View File

@ -3,13 +3,6 @@
On ecrit un programme qui à partir d'un fichier message et On ecrit un programme qui à partir d'un fichier message et
d'un fichier clé produira un fichier message_code 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 <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -24,17 +17,31 @@ int codage(int argc, char *argv[]) {
int k1; int k1;
int calcul; int calcul;
// Ouverture des fichiers et vérification d'erreurs d'ouverture
char * cheminFic_m = argv[2]; char * cheminFic_m = argv[2];
f_m = fopen(cheminFic_m, "r"); f_m = fopen(cheminFic_m, "r");
/* Traitement erreur */ if (f_m==NULL)
char * cheminFic_k = argv[3]; {
printf("Echec de l'ouverture du fichier.\n");
}
char * cheminFic_k = argv[3];
f_k = fopen(cheminFic_k, "r"); 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]; char * cheminFic_mc = argv[4];
f_mc = fopen(cheminFic_mc, "w"); 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) while ((c = fgetc(f_m)) != EOF)
{ {
k1 = fgetc(f_k); k1 = fgetc(f_k);
@ -42,7 +49,7 @@ int codage(int argc, char *argv[]) {
fputc(calcul, f_mc); fputc(calcul, f_mc);
} }
// Fermeture des fichiers
fclose(f_m); fclose(f_m);
fclose(f_k); fclose(f_k);
fclose(f_mc); fclose(f_mc);

View File

@ -1,40 +1,53 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include "fonctions.h" #include "fonctions.h"
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
FILE *f_m, *f_k, *f_mc; /* strcutures permettant, une fois FOPEN FILE *f_m, *f_k, *f_mc; /* strcutures permettant, une fois FOPEN
exécuté de recupérer des informations pour manipuler les fichiers exécuté de recupérer des informations pour manipuler les fichiers
en C */ en C */
int c, count=0;
char * cheminFic_m = argv[2]; char * cheminFic_m = argv[2];
int c,count=0;
f_m = fopen(cheminFic_m, "r");
if(f_m==NULL) /* recupération sur la ligne de commande des noms de fichiers et option (-c pour
{ codage, -d pour décodage) : message cle message_calculé
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 ./code -c f1 f2 f3
-d pour décodage : message cle message_calculé ./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); 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); decodage(argc, argv);
} }
return EXIT_SUCCESS; return EXIT_SUCCESS;

View File

@ -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 <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -9,24 +15,32 @@ int decodage(int argc, char *argv[]) {
int k1; int k1;
int calcul; int calcul;
// Ouverture des fichiers et vérification d'erreurs d'ouverture
char * cheminFic_m = argv[2]; char * cheminFic_m = argv[2];
f_m = fopen(cheminFic_m, "r"); f_m = fopen(cheminFic_m, "r");
if (f_m==NULL){ if (f_m==NULL)
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); {
printf("Echec de l'ouverture du fichier.\n");
} }
char * cheminFic_k = argv[3]; char * cheminFic_k = argv[3];
f_k = fopen(cheminFic_k, "r"); f_k = fopen(cheminFic_k, "r");
if (f_k==NULL){ if (f_k==NULL)
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); {
printf("Echec de l'ouverture du fichier.\n");
} }
char * cheminFic_mdc = argv[4]; char * cheminFic_mdc = argv[4];
f_mdc = fopen(cheminFic_mdc, "w"); f_mdc = fopen(cheminFic_mdc, "w");
if (f_mdc==NULL){ if (f_mdc==NULL)
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n"); {
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) while ((c = fgetc(f_m)) != EOF)
{ {
k1 = fgetc(f_k); k1 = fgetc(f_k);
@ -34,7 +48,7 @@ int decodage(int argc, char *argv[]) {
fputc(calcul, f_mdc); fputc(calcul, f_mdc);
} }
/*fermeture des fichiers*/ //fermeture des fichiers
fclose(f_m); fclose(f_m);
fclose(f_k); fclose(f_k);
fclose(f_mdc); fclose(f_mdc);

View File

@ -4,7 +4,9 @@
#include <string.h> #include <string.h>
#include "fonctions.h" #include "fonctions.h"
int generate(int count,int argc,char *argv[])
int generate(int count, int argc,char *argv[])
{ {
FILE *f; FILE *f;
char cle[count]; char cle[count];
@ -12,20 +14,30 @@ int generate(int count,int argc,char *argv[])
char characteres[26]="azertyuiopqsdfghjklmwxcvbn"; char characteres[26]="azertyuiopqsdfghjklmwxcvbn";
srand(time(NULL)); 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; i = rand()%26;
cle[a]=characteres[i]; cle[a]=characteres[i];
} }
for (a=1;a<3;a++){
for (a=1;a<3;a++)
{
i = rand()%26; i = rand()%26;
cle[count-a]=characteres[i]; cle[count-a]=characteres[i];
} }
f = fopen (argv[3], "w"); f = fopen (argv[3], "w");
if (f) {
fwrite (cle, sizeof(char), count, f); //Ecris la clé précédemmant créée dans le fichier cle.txt par exemple
} else { if (f)
return EXIT_FAILURE; {
} fwrite (cle, sizeof(char), count, f);
fclose (f); }
else
{
return EXIT_FAILURE;
}
fclose (f);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }

View File

@ -1,148 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
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;
}

View File

@ -1 +1 @@
txt a encoder stp marche txt a encoder

View File

@ -1 +0,0 @@
μμΦ<EFBFBD>ΟΣ<EFBFBD>ΣΡΪίΦƒήλκΫΠΤΦαΨ

View File

@ -1 +0,0 @@
txt a encoder stp marche non

BIN
prgm/run

Binary file not shown.