Initial commit
This commit is contained in:
commit
ee66b0b643
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/out/
|
||||||
|
/vernam
|
20
Makefile
Normal file
20
Makefile
Normal 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
|
6
inc/decode.h
Normal file
6
inc/decode.h
Normal 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
6
inc/encode.h
Normal 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
6
inc/key.h
Normal 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
1
message.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Il fait beau
|
1
message_codé.txt
Normal file
1
message_codé.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
タチjィ誇カ峡ト<EFBFBD>S
|
1
message_décodé.txt
Normal file
1
message_décodé.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Il fait beau
|
42
src/decode.c
Normal file
42
src/decode.c
Normal 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
42
src/encode.c
Normal 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
36
src/key.c
Normal 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
44
src/main.c
Normal 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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user