94 lines
2.9 KiB
C
94 lines
2.9 KiB
C
|
#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;
|
||
|
}
|
||
|
|