Cryptage vigénere

cs_babounlehobbit Messages postés 12 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 23 octobre 2005 - 28 mai 2004 à 12:09
cs_babounlehobbit Messages postés 12 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 23 octobre 2005 - 29 mai 2004 à 10:45
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 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;}

2 réponses

maevasa Messages postés 100 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 3 août 2004
28 mai 2004 à 14:56
je crois que ton problème vient de là:
#define CL 10 //longeur de la clé
#define TX 110 //longeur du texte a coder

parce que dès que ton fichier est plus grand que 110 ça plante !
de plus l'erreur d'affichage que tu as je n'ai pas compris d'où il provient
0
cs_babounlehobbit Messages postés 12 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 23 octobre 2005
29 mai 2004 à 10:45
merci !
c tres con en fait !
0
Rejoignez-nous