DEV_VERNAM/cle.c

94 lines
2.9 KiB
C
Raw Normal View History

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void gen_cle(char* chemincle,char* chemintxt){
/* Fonction qui génère une clé en fonction de la taille du
message laissé par l'utilisateur*/
/* On ouvre les flux pour enregistrer les éléments.*/
FILE* flux_c, *flux_t;
srand(time(NULL));
/* On créer des variables pour stockers nos futurs infos*/
char stck[2];
char elt[1];
/* Ouverture des fichiers */
flux_t = fopen(chemintxt, "r");
flux_c = fopen(chemincle, "w");
/* On parcours 1 a 1 tous les char que le fichier avec le
message de l'utilisateur*/
while(fread(stck, sizeof(char), 1, flux_t)){
/* Pour chaques elts, on ajoute un char de la table ASCII
en guise de char pour la cle*/
elt[0] = (char) random()%256;
fwrite(elt , sizeof(char), 1, flux_c);
}
fclose(flux_c);
fclose(flux_t);
}
void gen_mot_cryp(char* chemincle, char* chemintxt, char* chemincrypte){
/* Cette fonction tranforme un message no crypté en un
crypté grace a la clé de cryptage / décryptage */
FILE* flux_c, *flux_t, *flux_crpt;
char stck[2];
char stckd[2];
char elt[1];
flux_t = fopen(chemintxt, "r");
flux_c = fopen(chemincle, "r");
flux_crpt = fopen(chemincrypte, "w");
/* Pour crypter le message, on prend la valeur décimale du x
elt de la cle qu'on aditionne a la valeur decimal du x elt du
message de l'utilisateur*/
while((fread(stck, sizeof(char), 1, flux_t)) && (fread(stckd, sizeof(char), 1, flux_c))){
elt[0] = (char) (((int) stck[0] + (int) stckd[0] )%256);
fwrite(elt , sizeof(char), 1, flux_crpt);
}
fclose(flux_t);
fclose(flux_c);
fclose(flux_crpt);
}
void decrypt(char* chemincle, char* chemincrypte, char* chemin_decrpt){
/* Cette fonctione permet de décrypter le message,
tandis que nous avons aditionner le message a la clé
Cette fois, nous allons soustraire les valeurs de la clé aux
valeurs du texte crypté*/
FILE* flux_c, *flux_crpt, *flux_dcrpt;
char stck[2];
char stckd[2];
char elt[1];
flux_c = fopen(chemincle, "r");
flux_crpt = fopen(chemincrypte, "r");
flux_dcrpt = fopen(chemin_decrpt, "w");
while((fread(stck, sizeof(char), 1, flux_crpt)) && (fread(stckd, sizeof(char), 1, flux_c))){
/* N valeurs décimal des chars du txt_crypté - N valeurs décimals des chars de la clé */
elt[0] = (char) (((int) stck[0] - (int) stckd[0])%256);
fwrite(elt , sizeof(char), 1, flux_dcrpt);
}
fclose(flux_c);
fclose(flux_crpt);
fclose(flux_dcrpt);
}
int main(void){
/*Apelles des fonctions.*/
gen_cle("fichier_cle.txt", "fichier_txt.txt");
gen_mot_cryp("fichier_cle.txt", "fichier_txt.txt", "fichier_crypte.txt");
decrypt("fichier_cle.txt", "fichier_crypte.txt", "fichier_dcrpt.txt");
return 0;
}