Chiffre de Vigenère

bouchkirailias Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour tt le monde, svp je travail sur la méthode de cryptage "Le chiffre de Vigenère"
j'ai presque terminé, main actuellement je recontre un probléme que j'ai pas pu résoudre, j'ai essayer tt seul ça fait 3 semaine, ==== DECRYPTAGA====

voici mon programme :
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
//char *alphabet = "abcdefghijklmnopqrstuvwxyz";
char texte[200]; //texte à coder
char *ptexte = texte;
char clef[20]; //la clé
char *pclef = clef;
char crypte[200];
char *p = crypte; //le texte crypte
char decrypte[200];
char *pdec=decrypte;
int lgtexte; //longueure du texte à crypter
int lgclef; //longueure de la clef
/* cryptage */
void cryptage(char* ptexte, char* pclef)
{
int i = 0;
do {
int j = 0;

do {
/* attention aux parenthèses */
if (isalpha(*(ptexte + i))!= 0)
{
/* = à la place de == */
*(p + i) = (*(ptexte + i) + *(pclef + j) - 2 * 'a') % 26 + 'a';
i++;
j++;
}
else
{
*(p + i) = *(ptexte + i);
i++;
}
}
/* attention aux condition de sortie */
while (j < lgclef);
}
while (i < lgtexte);
puts("/*message crypte*/");
puts(crypte);
}
void decryptage(char* p, char* pclef)
{
int i = 0;
do
{
int j = 0;

do {
/* attention aux parenthèses */
if (isalpha(*(p + i))!= 0)
{
/* = à la place de == */

*(pdec + i) =(*(p + i) - *(pclef + j)+ 2 * 'a') % 26 +'a' ;


// *(pdec + i) =26+(*(p + i) - *(pclef + j)) +'a';


i++;
j++;
}
else
{
*(pdec+i)=*(p+i);/*c'est ici le problème*/
i++;
}
}
/* attention aux condition de sortie */
while (j < lgclef);
}
while (i < lgtexte);
puts("/*message decrypte*/");
puts(decrypte);
}
void main()
{


puts("+++taper le texte à coder+++ \n");
gets(texte);
lgtexte = strlen(texte);
printf("+++taper la clef+++ \n");
gets(clef);
lgclef = strlen(clef);
cryptage(ptexte, pclef);
decryptage(p, pclef);
}



Les formules je les ai trouver sur internet, mais le
NE MARCHE PASSS !!!
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

#include<math.h>
Inutile ici.

char texte[200]; //texte à coder
char *ptexte = texte;
etc.

Pas de variables globales (sauf cas particuliers). Il vaut mieux les déclarer dans la fonction main() et passer les arguments en paramètres de fonction quand nécessaire.
De plus, le pointeur ptexte ne sert à rien dans ton programme. Si tu mets texte en paramètre des fonctions, cela enverra déjà un pointeur sur le premier élément du tableau. Donc tous tes pointeurs sont inutiles ici.

void main()
Le bon prototype est : int main(void)
Et il ne faut pas oublier : return 0; en fin du main pour dire que tout va bien.

puts("+++taper le texte à coder+++ \n");
Pour info, puts() émet déjà un '\n' en fin de ligne.

gets(texte);
A ne jamais utiliser. Il vaut mieux utiliser fgets(). De plus, attention cela laisse un '\n' dans le tableau s'il est assez grand. Il vaut mieux le retirer si tu souhaites faire du chiffrement (utilisation de strchr()).

Pour info, cryptage n'existe pas, on parle de chiffrement. Et décryptage est employé à mauvais escient. Ici il s'agit de déchiffrement.

Je te laisse déjà corriger tout ça. Ensuite reposte ton code avec les corrections en le mettant entre deux balises "code c" :
</gras>ici tu mets ton code<gras>

Cela sera plus lisible. Et je corrigerai les autres fonctions (je ne les ai pas regardées).
Cdlt,
0