Version finale
This commit is contained in:
parent
6b0eccf294
commit
e394f4a01e
@ -1,5 +1,5 @@
|
|||||||
run : codage.o decodage.o code.o generate.o
|
code : codage.o decodage.o code.o generate.o
|
||||||
gcc -o run codage.o decodage.o code.o generate.o
|
gcc -o code codage.o decodage.o code.o generate.o
|
||||||
|
|
||||||
codage.o : codage.c
|
codage.o : codage.c
|
||||||
gcc -o codage.o -c codage.c
|
gcc -o codage.o -c codage.c
|
||||||
@ -14,4 +14,4 @@ generate.o : generate.c
|
|||||||
gcc -o generate.o -c generate.c
|
gcc -o generate.o -c generate.c
|
||||||
|
|
||||||
clean :
|
clean :
|
||||||
rm -f *.o
|
rm -f *.o -f code
|
||||||
|
@ -1 +1 @@
|
|||||||
ixbvhdkevteiludzxvpsnpcp
|
ewdxtsjgwhkpybfnthzfibqx
|
@ -4,13 +4,6 @@
|
|||||||
d'un fichier clé produira un fichier message_code
|
d'un fichier clé produira un fichier message_code
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
1. La méthode la plus simple les noms de fichiers sont connus
|
|
||||||
2. On demande le nom des fichiers à l'utilisateur
|
|
||||||
3. Les noms de fichiers sont passés en paramètres sur le ligne de commande
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "fonctions.h"
|
#include "fonctions.h"
|
||||||
@ -24,17 +17,31 @@ int codage(int argc, char *argv[]) {
|
|||||||
int k1;
|
int k1;
|
||||||
int calcul;
|
int calcul;
|
||||||
|
|
||||||
|
// Ouverture des fichiers et vérification d'erreurs d'ouverture
|
||||||
|
|
||||||
char * cheminFic_m = argv[2];
|
char * cheminFic_m = argv[2];
|
||||||
f_m = fopen(cheminFic_m, "r");
|
f_m = fopen(cheminFic_m, "r");
|
||||||
/* Traitement erreur */
|
if (f_m==NULL)
|
||||||
char * cheminFic_k = argv[3];
|
{
|
||||||
|
printf("Echec de l'ouverture du fichier.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
char * cheminFic_k = argv[3];
|
||||||
f_k = fopen(cheminFic_k, "r");
|
f_k = fopen(cheminFic_k, "r");
|
||||||
/* Traitement erreur */
|
if (f_k==NULL)
|
||||||
|
{
|
||||||
|
printf("Echec de l'ouverture du fichier.\n");
|
||||||
|
}
|
||||||
|
|
||||||
char * cheminFic_mc = argv[4];
|
char * cheminFic_mc = argv[4];
|
||||||
f_mc = fopen(cheminFic_mc, "w");
|
f_mc = fopen(cheminFic_mc, "w");
|
||||||
/* Traitement erreur */
|
if (f_mc==NULL)
|
||||||
|
{
|
||||||
|
printf("Echec de l'ouverture du fichier.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Boucle : calcul permettant de coder un caractère puis l'écrire dans le
|
||||||
|
// fichier f_m
|
||||||
while ((c = fgetc(f_m)) != EOF)
|
while ((c = fgetc(f_m)) != EOF)
|
||||||
{
|
{
|
||||||
k1 = fgetc(f_k);
|
k1 = fgetc(f_k);
|
||||||
@ -42,7 +49,7 @@ int codage(int argc, char *argv[]) {
|
|||||||
fputc(calcul, f_mc);
|
fputc(calcul, f_mc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fermeture des fichiers
|
||||||
fclose(f_m);
|
fclose(f_m);
|
||||||
fclose(f_k);
|
fclose(f_k);
|
||||||
fclose(f_mc);
|
fclose(f_mc);
|
||||||
|
49
prgm/code.c
49
prgm/code.c
@ -1,40 +1,53 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include "fonctions.h"
|
#include "fonctions.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
FILE *f_m, *f_k, *f_mc; /* strcutures permettant, une fois FOPEN
|
FILE *f_m, *f_k, *f_mc; /* strcutures permettant, une fois FOPEN
|
||||||
exécuté de recupérer des informations pour manipuler les fichiers
|
exécuté de recupérer des informations pour manipuler les fichiers
|
||||||
en C */
|
en C */
|
||||||
int c, count=0;
|
|
||||||
char * cheminFic_m = argv[2];
|
char * cheminFic_m = argv[2];
|
||||||
|
int c,count=0;
|
||||||
|
|
||||||
f_m = fopen(cheminFic_m, "r");
|
|
||||||
if(f_m==NULL)
|
|
||||||
{
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
for (c = getc(f_m); c != EOF; c = getc(f_m))
|
|
||||||
{
|
|
||||||
count = count + 1;
|
|
||||||
}
|
|
||||||
generate(count, argc, argv);
|
|
||||||
//fclose(f_m);
|
|
||||||
|
|
||||||
/* recupération sur la ligne de commande des noms de fichiers et option (-c pour codage
|
/* recupération sur la ligne de commande des noms de fichiers et option (-c pour
|
||||||
-d pour décodage : message cle message_calculé
|
codage, -d pour décodage) : message cle message_calculé
|
||||||
|
|
||||||
code -c f1 f2 f3
|
./code -c f1 f2 f3
|
||||||
code -d f1 f2 f3
|
./code -d f1 f2 f3
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(argv[1]=="-c")
|
|
||||||
|
// Si l'option donnée en premier argument est "-c", alors on génère une clé
|
||||||
|
// aléatoirement et on code le message avec
|
||||||
|
if(strcmp(argv[1], "-c")==0)
|
||||||
{
|
{
|
||||||
|
// Parcours le fichier du message à coder pour connaitre le nombre de caractères présents.
|
||||||
|
f_m = fopen(cheminFic_m, "r");
|
||||||
|
if(f_m==NULL)
|
||||||
|
{
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
for (c = getc(f_m); c != EOF; c = getc(f_m))
|
||||||
|
{
|
||||||
|
count = count + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Génère une clé aléatoire
|
||||||
|
generate(count, argc, argv);
|
||||||
|
|
||||||
|
// Code le message
|
||||||
codage(argc, argv);
|
codage(argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(argv[1]=="-d")
|
/* Si l'option donée en premier argument est "-d", alors on décode le message
|
||||||
|
donné en 2eme argument en mettant le résultat dans un nouveau fichier nommé
|
||||||
|
en 4eme argument
|
||||||
|
*/
|
||||||
|
else if(strcmp(argv[1], "-d")==0)
|
||||||
{
|
{
|
||||||
|
// Décode le message codé
|
||||||
decodage(argc, argv);
|
decodage(argc, argv);
|
||||||
}
|
}
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
/*
|
||||||
|
Decodage du message
|
||||||
|
On ecrit un programme qui à partir d'un fichier message_code et
|
||||||
|
d'un fichier clé produira un fichier message_decode
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
@ -9,24 +15,32 @@ int decodage(int argc, char *argv[]) {
|
|||||||
int k1;
|
int k1;
|
||||||
int calcul;
|
int calcul;
|
||||||
|
|
||||||
|
// Ouverture des fichiers et vérification d'erreurs d'ouverture
|
||||||
|
|
||||||
char * cheminFic_m = argv[2];
|
char * cheminFic_m = argv[2];
|
||||||
f_m = fopen(cheminFic_m, "r");
|
f_m = fopen(cheminFic_m, "r");
|
||||||
if (f_m==NULL){
|
if (f_m==NULL)
|
||||||
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n");
|
{
|
||||||
|
printf("Echec de l'ouverture du fichier.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
char * cheminFic_k = argv[3];
|
char * cheminFic_k = argv[3];
|
||||||
f_k = fopen(cheminFic_k, "r");
|
f_k = fopen(cheminFic_k, "r");
|
||||||
if (f_k==NULL){
|
if (f_k==NULL)
|
||||||
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n");
|
{
|
||||||
|
printf("Echec de l'ouverture du fichier.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
char * cheminFic_mdc = argv[4];
|
char * cheminFic_mdc = argv[4];
|
||||||
f_mdc = fopen(cheminFic_mdc, "w");
|
f_mdc = fopen(cheminFic_mdc, "w");
|
||||||
if (f_mdc==NULL){
|
if (f_mdc==NULL)
|
||||||
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n");
|
{
|
||||||
|
printf("Echec de l'ouverture du fichier.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Boucle : calcul permettant de decoder un caractère puis l'écrire dans le
|
||||||
|
// fichier f_mdc
|
||||||
while ((c = fgetc(f_m)) != EOF)
|
while ((c = fgetc(f_m)) != EOF)
|
||||||
{
|
{
|
||||||
k1 = fgetc(f_k);
|
k1 = fgetc(f_k);
|
||||||
@ -34,7 +48,7 @@ int decodage(int argc, char *argv[]) {
|
|||||||
fputc(calcul, f_mdc);
|
fputc(calcul, f_mdc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*fermeture des fichiers*/
|
//fermeture des fichiers
|
||||||
fclose(f_m);
|
fclose(f_m);
|
||||||
fclose(f_k);
|
fclose(f_k);
|
||||||
fclose(f_mdc);
|
fclose(f_mdc);
|
||||||
|
@ -4,7 +4,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "fonctions.h"
|
#include "fonctions.h"
|
||||||
|
|
||||||
int generate(int count,int argc,char *argv[])
|
|
||||||
|
|
||||||
|
int generate(int count, int argc,char *argv[])
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char cle[count];
|
char cle[count];
|
||||||
@ -12,20 +14,30 @@ int generate(int count,int argc,char *argv[])
|
|||||||
char characteres[26]="azertyuiopqsdfghjklmwxcvbn";
|
char characteres[26]="azertyuiopqsdfghjklmwxcvbn";
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
for(a=0;a<(count-2);a++) { /*on fait donc une première boucle*/
|
|
||||||
|
//Crée la nouvelle clé à partir du nombre de caractères du message
|
||||||
|
for(a=0;a<(count-2);a++)
|
||||||
|
{
|
||||||
i = rand()%26;
|
i = rand()%26;
|
||||||
cle[a]=characteres[i];
|
cle[a]=characteres[i];
|
||||||
}
|
}
|
||||||
for (a=1;a<3;a++){
|
|
||||||
|
for (a=1;a<3;a++)
|
||||||
|
{
|
||||||
i = rand()%26;
|
i = rand()%26;
|
||||||
cle[count-a]=characteres[i];
|
cle[count-a]=characteres[i];
|
||||||
}
|
}
|
||||||
f = fopen (argv[3], "w");
|
f = fopen (argv[3], "w");
|
||||||
if (f) {
|
|
||||||
fwrite (cle, sizeof(char), count, f);
|
//Ecris la clé précédemmant créée dans le fichier cle.txt par exemple
|
||||||
} else {
|
if (f)
|
||||||
return EXIT_FAILURE;
|
{
|
||||||
}
|
fwrite (cle, sizeof(char), count, f);
|
||||||
fclose (f);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
fclose (f);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
148
prgm/main.c
148
prgm/main.c
@ -1,148 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
int decodage(int argc, char *argv[]) {
|
|
||||||
FILE *f_m, *f_k, *f_mdc; /* strcutures permettant, une fois FOPEN
|
|
||||||
exécuté de recupérer des informations pour manipuler les fichiers
|
|
||||||
en C */
|
|
||||||
int c;
|
|
||||||
int k1;
|
|
||||||
int calcul;
|
|
||||||
|
|
||||||
char * cheminFic_m = "message.txt";
|
|
||||||
f_m = fopen(cheminFic_m, "r");
|
|
||||||
if (f_m==NULL){
|
|
||||||
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
char * cheminFic_k = "cle.txt";
|
|
||||||
f_k = fopen(cheminFic_k, "r");
|
|
||||||
if (f_k==NULL){
|
|
||||||
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
char * cheminFic_mdc = "message_dc.txt";
|
|
||||||
f_mdc = fopen(cheminFic_mdc, "w");
|
|
||||||
if (f_mdc==NULL){
|
|
||||||
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((c = fgetc(f_m)) != EOF)
|
|
||||||
/* EOF est une constante obligatoirement
|
|
||||||
négative (elle vaut -1 sous Linux). */
|
|
||||||
{
|
|
||||||
k1 = fgetc(f_k); /* fgetc lis le caractère à la position courante du flux considéré*/
|
|
||||||
calcul = c-k1 >= 0?c-k1:256-(c-k1); /* ?? */
|
|
||||||
fputc(calcul, f_mdc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*fermeture des fichiers*/
|
|
||||||
fclose(f_m);
|
|
||||||
fclose(f_k);
|
|
||||||
fclose(f_mdc);
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int codage(int argc, char *argv[]) {
|
|
||||||
FILE *f_m, *f_k, *f_mc; /* strcutures permettant, une fois FOPEN
|
|
||||||
exécuté de recupérer des informations pour manipuler les fichiers
|
|
||||||
en C */
|
|
||||||
int c;
|
|
||||||
int k1;
|
|
||||||
int calcul;
|
|
||||||
|
|
||||||
char * cheminFic_m = "message.txt";
|
|
||||||
f_m = fopen(cheminFic_m, "r");
|
|
||||||
if (f_m==NULL){
|
|
||||||
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
char * cheminFic_k = "cle.txt";
|
|
||||||
f_k = fopen(cheminFic_k, "r");
|
|
||||||
if (f_k==NULL){
|
|
||||||
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
char * cheminFic_mc = "message_c.txt";
|
|
||||||
f_mc = fopen(cheminFic_mc, "w");
|
|
||||||
if (f_mc==NULL){
|
|
||||||
printf("L'ouverture du fichier à échouer. Veuillez verifier l'existence de celui-ci.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
while ((c = fgetc(f_m)) != EOF)
|
|
||||||
/* EOF est une constante qui est obligatoirement
|
|
||||||
négative (elle vaut -1 sous Linux). */
|
|
||||||
{
|
|
||||||
k1 = fgetc(f_k);
|
|
||||||
calcul = (c+k1) % 256; /* modulo 256 du caractère qui est entrain d'être lu */
|
|
||||||
fputc(calcul, f_mc); /* fputc permet d'écrire un caractère sur le flux de caractères passé en paramètre*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fclose(f_m);
|
|
||||||
fclose(f_k);
|
|
||||||
fclose(f_mc);
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
FILE* fp, *fichier; /* strcutures permettant, une fois FOPEN exécuté de recupérer des informations pour manipuler les fichiers en C */
|
|
||||||
int c, nbrchar;
|
|
||||||
char cle[nbrchar];
|
|
||||||
int a,place;
|
|
||||||
char characteres[26]="abcdefghijklmnopqrstuvwxyz";
|
|
||||||
srand(time(NULL));
|
|
||||||
|
|
||||||
fp = fopen("message.txt", "r"); /*ouvre le fichier*/
|
|
||||||
if (!fp) {
|
|
||||||
printf("Could not open file \n"); /*renvoie une erreur si le nom du fichier est incorrect*/
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (c = getc(fp); c != EOF; c = getc(fp)){ /*extrait les caractères du fichiers*/
|
|
||||||
// Increment un caractère dans le compteur
|
|
||||||
nbrchar = nbrchar + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close the file
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
/* !! ATTENTION nbrchar compte 2 caractères de plus que le nombre de caractère visible */
|
|
||||||
|
|
||||||
for(a=0;a<(nbrchar-2);a++) { /*on fait donc une première boucle*/
|
|
||||||
place = rand()%26;
|
|
||||||
cle[a]=characteres[place];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (a=1;a<3;a++){
|
|
||||||
place = rand()%26;
|
|
||||||
cle[nbrchar-a]=characteres[place];
|
|
||||||
}
|
|
||||||
|
|
||||||
fichier = fopen ("cle.txt", "wb");
|
|
||||||
if (fichier) {
|
|
||||||
fwrite (cle, sizeof(char), nbrchar, fichier);
|
|
||||||
} else {
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
fclose (fichier);
|
|
||||||
|
|
||||||
if (argv[1]=="-c"){
|
|
||||||
codage(argc, argv);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (argv[1]=="-d"){
|
|
||||||
decodage(argc, argv);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
@ -1 +1 @@
|
|||||||
txt a encoder stp marche
|
txt a encoder
|
@ -1 +0,0 @@
|
|||||||
μμΦ<EFBFBD>Ο‹Σ<EFBFBD>ΣΡΪίΦƒήλκ‹ΫΠΤΦαΨ
|
|
@ -1 +0,0 @@
|
|||||||
txt a encoder stp marche non
|
|
Loading…
Reference in New Issue
Block a user