commit ee66b0b643935cff0ffc1139c0f773a87dcfa1c4 Author: Lyanis Souidi Date: Thu Dec 15 20:10:44 2022 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..35e5086 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/out/ +/vernam diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6da2c5e --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +CC = gcc +CFLAGS = -ansi -Wall +SRCDIR = ./src +ODIR = ./out +OFILES = $(subst src/,out/,$(subst .c,.o,$(shell find $(SRCDIR)/ -type f))) +EXE = vernam + +but : $(EXE) + +$(ODIR)/%.o : $(SRCDIR)/%.c + @mkdir -p $(@D) + $(CC) -c $< -o $@ + +$(EXE) : $(OFILES) + $(CC) $(CFLAGS) -o $(EXE) $(OFILES) + +clean : + -rm -rf $(ODIR) + +.PHONY : but clean diff --git a/cle.txt b/cle.txt new file mode 100644 index 0000000..e5d8a10 --- /dev/null +++ b/cle.txt @@ -0,0 +1 @@ +wUJB+mBkJ_&OI \ No newline at end of file diff --git a/inc/decode.h b/inc/decode.h new file mode 100644 index 0000000..b829b55 --- /dev/null +++ b/inc/decode.h @@ -0,0 +1,6 @@ +#ifndef DECODE_H +#define DECODE_H + +int decode(char* filename_input, char* filename_key, char* filename_output); + +#endif \ No newline at end of file diff --git a/inc/encode.h b/inc/encode.h new file mode 100644 index 0000000..302c9aa --- /dev/null +++ b/inc/encode.h @@ -0,0 +1,6 @@ +#ifndef ENCODE_H +#define ENCODE_H + +int encode(char* filename_input, char* filename_key, char* filename_output); + +#endif \ No newline at end of file diff --git a/inc/key.h b/inc/key.h new file mode 100644 index 0000000..3314da7 --- /dev/null +++ b/inc/key.h @@ -0,0 +1,6 @@ +#ifndef KEY_H +#define KEY_H + +int create_key(char* filename_input, char* filename_output); + +#endif \ No newline at end of file diff --git a/message.txt b/message.txt new file mode 100644 index 0000000..799b760 --- /dev/null +++ b/message.txt @@ -0,0 +1 @@ +Il fait beau diff --git a/message_codé.txt b/message_codé.txt new file mode 100644 index 0000000..85780ca --- /dev/null +++ b/message_codé.txt @@ -0,0 +1 @@ +ÀÁj¨ŒÖ¶‹¬Ä‡ÄS \ No newline at end of file diff --git a/message_décodé.txt b/message_décodé.txt new file mode 100644 index 0000000..799b760 --- /dev/null +++ b/message_décodé.txt @@ -0,0 +1 @@ +Il fait beau diff --git a/src/decode.c b/src/decode.c new file mode 100644 index 0000000..5f44f3b --- /dev/null +++ b/src/decode.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include + +int decode(char *filename_input, char *filename_key, char *filename_output) { + FILE *file_input, *file_key, *file_output; + int c, k1, calcul; + + file_input = fopen(filename_input, "r"); + if(file_input == NULL) { + fprintf(stderr, "ERREUR : Impossible d'ouvrir le fichier d'entrée%s\n", filename_input); + return EXIT_FAILURE; + } + + file_key = fopen(filename_key, "r"); + if(file_key == NULL) { + fclose(file_input); + fprintf(stderr, "ERREUR : Impossible d'ouvrir le fichier contenant la clé%s\n", filename_key); + return EXIT_FAILURE; + } + + file_output = fopen(filename_output, "w"); + if(file_output == NULL) { + fclose(file_input); + fclose(file_key); + fprintf(stderr, "ERREUR : Impossible d'ouvrir le fichier de sortue%s\n", filename_output); + return EXIT_FAILURE; + } + + while ((c = fgetc(file_input)) != EOF) { + k1 = fgetc(file_key); + calcul = c-k1 >= 0?c-k1:256-(c-k1); + fputc(calcul, file_output); + } + + fclose(file_input); + fclose(file_key); + fclose(file_output); + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/src/encode.c b/src/encode.c new file mode 100644 index 0000000..cf850ef --- /dev/null +++ b/src/encode.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include + +int encode(char *filename_input,char *filename_key, char *filename_output) { + FILE *file_input, *file_key, *file_output; + int c, k1, calcul; + + file_input = fopen(filename_input, "r"); + if(file_input == NULL) { + fprintf(stderr, "ERREUR : Impossible d'ouvrir le fichier d'entrée%s\n", filename_input); + return EXIT_FAILURE; + } + + file_key = fopen(filename_key, "r"); + if(file_key == NULL) { + fclose(file_input); + fprintf(stderr, "ERREUR : Impossible d'ouvrir le fichier contenant la clé%s\n", filename_key); + return EXIT_FAILURE; + } + + file_output = fopen(filename_output, "w"); + if(file_output == NULL) { + fclose(file_input); + fclose(file_key); + fprintf(stderr, "ERREUR : Impossible d'ouvrir le fichier de sortue%s\n", filename_output); + return EXIT_FAILURE; + } + + while ((c = fgetc(file_input)) != EOF) { + k1 = fgetc(file_key); + calcul = (c+k1) % 256; + fputc(calcul, file_output); + } + + fclose(file_input); + fclose(file_key); + fclose(file_output); + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/src/key.c b/src/key.c new file mode 100644 index 0000000..fe73bc7 --- /dev/null +++ b/src/key.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include + +int create_key(char* filename_input, char* filename_output) { + FILE *file_input, *file_output; + int x, c; + char characters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&~#'`\"{}()[]-_+=|@$£€¤*µ%!§:/\\;.,?"; + size_t characters_length = strlen(characters); + srand(time(NULL)); + + file_input = fopen(filename_input, "r"); + if(file_input == NULL) { + fprintf(stderr, "ERREUR : Impossible d'ouvrir le fichier d'entrée%s\n", filename_input); + return EXIT_FAILURE; + } + + + file_output = fopen(filename_output, "w"); + if (file_output == NULL) { + fclose(file_input); + fprintf(stderr, "ERREUR : Impossible d'ouvrir le fichier de sortie %s\n", filename_output); + return EXIT_FAILURE; + } + + while (fgetc(file_input) != EOF) { + x = rand() % characters_length; + fputc(characters[x], file_output); + } + + fclose(file_input); + fclose(file_output); + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..d46d2ab --- /dev/null +++ b/src/main.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include "../inc/encode.h" +#include "../inc/decode.h" +#include "../inc/key.h" + +int main(int argc, char *argv[]) { + if (argc <= 1) { + fprintf(stderr, "ERREUR : Aucun argument passé en paramètre.\nUsage :\n Encodage :\n\t%s -c [fichier d'entrée] [fichier clé] [fichier de sorite]\n Décodage :\n\t%s -d [fichier d'entrée] [fichier clé] [fichier de sorite]\n Création d'une clé :\n\t%s -k [fichier d'entrée] [fichier de sorite]\n", argv[0], argv[0], argv[0]); + return EXIT_FAILURE; + } + + if (strcmp(argv[1], "-c") == 0) { + if (argc < 5) { + fprintf(stderr, "ERREUR : Arguments manquants.\nUsage : %s -c [fichier d'entrée] [fichier clé] [fichier de sorite]\n", argv[0]); + return EXIT_FAILURE; + } + + return encode(argv[2], argv[3], argv[4]); + + } else if (strcmp(argv[1], "-d") == 0) { + if (argc < 5) { + fprintf(stderr, "ERREUR : Arguments manquants.\nUsage : %s -d [fichier d'entrée] [fichier clé] [fichier de sorite]\n"); + return EXIT_FAILURE; + } + + return decode(argv[2], argv[3], argv[4]); + + } else if (strcmp(argv[1], "-k") == 0) { + if (argc < 4) { + fprintf(stderr, "ERREUR : Arguments manquants.\nUsage : %s -k [fichier d'entrée] [fichier de sortie]\n"); + return EXIT_FAILURE; + } + + return create_key(argv[2], argv[3]); + + } else { + fprintf(stderr, "ERREUR : L'argument \"%s\" n'est pas reconnu.\nUsage :\n Encodage :\n\t%s -c [fichier d'entrée] [fichier clé] [fichier de sorite]\n Décodage :\n\t%s -d [fichier d'entrée] [fichier clé] [fichier de sorite]\n Création d'une clé :\n\t%s -k [fichier d'entrée] [fichier de sorite]\n", argv[1], argv[0], argv[0], argv[0]); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} \ No newline at end of file