1
0

Initial commit

This commit is contained in:
Lyanis SOUIDI 2022-12-15 20:10:44 +01:00
commit ee66b0b643
13 changed files with 208 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/out/
/vernam

20
Makefile Normal file
View File

@ -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

1
cle.txt Normal file
View File

@ -0,0 +1 @@
wUJB+mBkJ_&OI

6
inc/decode.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef DECODE_H
#define DECODE_H
int decode(char* filename_input, char* filename_key, char* filename_output);
#endif

6
inc/encode.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef ENCODE_H
#define ENCODE_H
int encode(char* filename_input, char* filename_key, char* filename_output);
#endif

6
inc/key.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef KEY_H
#define KEY_H
int create_key(char* filename_input, char* filename_output);
#endif

1
message.txt Normal file
View File

@ -0,0 +1 @@
Il fait beau

1
message_codé.txt Normal file
View File

@ -0,0 +1 @@
タチjィ誇カ峡ト<EFBFBD>S

1
message_décodé.txt Normal file
View File

@ -0,0 +1 @@
Il fait beau

42
src/decode.c Normal file
View File

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

42
src/encode.c Normal file
View File

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

36
src/key.c Normal file
View File

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

44
src/main.c Normal file
View File

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