Quelqu'un pourrait il me dire ce qui cloche dans mon code ??
il crypte pa scomme il le faudrai !
La grille de deprart est composee de tous le code ascii decalle ligne par ligne.
les fichiers clairs et clef sont en *.txt
Merci !
---------------------- code ---------------------------------------
//programme de cryptage a la vigenere
#define CL 10 //longeur de la clé
#define TX 110 //longeur du texte a coder
#include<stdio.h>
#include<string.h> //pour la fonction strlen()
main()
{
int a,b,i,j,s,lclef,k,d,ltx; //variable de cryptage ltx=longueur du txte (nmre ce char) s=long clef
char adresse[120]; //Adresse fichier
char txt[120];
char clef[120]; //Adresse clef
char txtkrypt[TX]={0};
char txtdekrypt[TX]={0};
char txtadekrypt[TX]={0};
char tampon[120];
FILE *f;
FILE *c;
FILE *sortie;
int ax,bx,ix,jx,sx,ch; //variable de decryptage
printf(" *********************************************\n");
printf(" * *\n");
printf(" *** Cryptage par la methode de Vigenere ***\n");
printf(" * *\n");
printf(" *********************************************\n\n\n");
//initialisation du tableau contenant tout le code ASCIIS
char grille[256][256] = {0} , lettre =0 ;
for( i = 0 ; i < 256 ; i++ )
{
for( int j = 0 ; j < 256 ; j++ )
{
grille[i][j] = lettre ;
if( ++lettre >= ( 255 + 1 ) )
lettre = 0 ;
}
lettre++ ;
}
printf("Que voulez vous faire :\n\n-1 Crypter\n\n-2 Decrypter\n\nReponse : ");
scanf("%d",&ch);
printf("\n");
switch (ch)
{
//********************************************* Cryptage ************************************************************************
case 1: printf("\n -> CRYPTAGE\n\n");
//Ouvetrure du fichier a crypter
printf("Saisir l'adresse du fichier clair : ");
scanf("%119s",adresse);
f=fopen(adresse,"r");
if (f==NULL) printf ("ERREUR OUVERTURE FICHIER ENTREE\n");
//Chargement du texte dans la variable txt
ltx=0;
while (fscanf(f,"%c",&txt[ltx])!=EOF)
{ltx=ltx+1;}
printf("\nNombre de caracteres : %i \n\n",ltx);
//Ouverture de la clef
printf("Saisir l'adresse de la clef : ");
scanf("%s",adresse);
c=fopen(adresse,"r");
if (c==NULL) printf ("ERREUR OUVERTURE FICHIER ENTREE\n");
//Chargement de la clef dans la variable clef
lclef=0;
while (fscanf(c,"%c",&clef[lclef])!=EOF)
{lclef=lclef+1;}
clef[lclef]='\0';
//Rallongement de la clef si necessaire
k=(ltx/lclef)+1;
//printf(" k = %i\n",k);
strcpy(tampon,clef); //Copie clef dans tampon en effaçant le contenu de tampon
tampon[lclef]='\0';
for (d=0;d<k;d++) strcat(clef,tampon); //Copie tampon kfois a la suite de clef
//Traitement - Cryptage
a=0;
b=0;
s=strlen(clef); //longeur de la clef
for(d=0;d<ltx;d++)
{
for(i=0;i<256;i++)
{ //incrementation de i
if(txt[a]==grille[0][i])
{ //si le caractere de txt egal un caractere de i
for(j=0;j<256;j++)
{ //incrementation de j
if(clef[b]==grille[j][0]) //si le caractere de cle egal un caractere de j
txtkrypt[a]=grille[j][i]; //txt a coder =caractere en j et en i
}
}
}
a++; //incrementation de a(caractere de txt)
b++; //incrementation de b(caractere de cle)
if(b==s)b=0; //si b=longeur de la cle alors b=0
}
//printf("Texte crypte : ");
//for(d=0;d<i;d++) printf("%c",txtkrypt[d]); //affiche texte crypté
printf("\n\n");
//enregistrement du texte decrypté dans un fichier
printf("Saisir l'adresse du fichier dans le quel mettre le texte crypte : ");
scanf("%119s",adresse);
//fopen en read puis message: si le fichier existe deja atention il va etre ecrasé sinon on affiche ficheire créé.
//fclose
//fopen en read
sortie=fopen(adresse,"w");
i=0;
for (i=0;i<ltx;i++) fprintf(sortie,"%c",txtkrypt[i]);
fclose(f);
fclose(c);
fclose(sortie);
break;
//********************************************* Décryptage ************************************************************************
case 2: printf("\n -> DECRYPTAGE\n\n");
//Ouvetrure du fichier a décrypter
printf("Saisir l'adresse du fichier crypte : ");
scanf("%119s",adresse);
f=fopen(adresse,"r");
if (f==NULL) printf ("ERREUR OUVERTURE FICHIER ENTREE\n");
//Chargement du texte dans la variable txtadekrypt
ltx=0;
while (fscanf(f,"%c",&txtadekrypt[ltx])!=EOF)
{ltx=ltx+1;}
printf("\nNombre de caracteres : %i \n\n",ltx);
//Ouverture de la clef
printf("Saisir l'adresse de la clef : ");
scanf("%s",adresse);
c=fopen(adresse,"r");
if (c==NULL) printf ("ERREUR OUVERTURE FICHIER ENTREE\n");
//Chargement de la clef dans la variable clef
lclef=0;
while (fscanf(c,"%c",&clef[lclef])!=EOF)
{lclef=lclef+1;}
clef[lclef]='\0';
//Rallongement de la clef si necessaire
k=(ltx/lclef)+1;
//printf(" k = %i\n",k);
strcpy(tampon,clef); //Copie clef dans tampon en effaçant le contenu de tampon
tampon[lclef]='\0';
for (d=0;d<k;d++) strcat(clef,tampon); //Copie tampon kfois a la suite de clef
//Traitement - Décryptage
ax=0;
bx=0;
sx=strlen(clef);
for(d=0;d<ltx;d++)
{
for(jx=0;jx<256;jx++)
{
if(clef[bx]==grille[jx][0])
{
for(ix=0;ix<256;ix++)
{
if(txtadekrypt[ax]==grille[jx][ix])
{ txtdekrypt[ax]=grille[0][ix]; }
}
}
}
ax++;
bx++;
if(bx==sx)bx=0;
}
printf("Texte decrypte : ");
for(d=0;d<i;d++) printf("%c",txtdekrypt[d]); //affiche texte decrypté
printf("\n\n");
//enregistrement du texte decrypté dans un fichier
printf("Saisir l'adresse du fichier dans le quel mettre le texte decrypte : ");
scanf("%119s",adresse);
//fopen en read puis message: si le fichier existe deja atention il va etre ecrasé sinon on affiche fichier créé.
//fclose
//fopen en read
sortie=fopen(adresse,"w");
i=0;
// do { fprintf(sortie,"%c",txtdekrypt[i]) ; i=i+1; } while (txtdekrypt[i]!='\0');
for (i=0;i<ltx;i++) fprintf(sortie,"%c",txtdekrypt[i]);
fclose(f);
fclose(c);
fclose(sortie);
}; //Fin du case
return 0;}