Cryptage/decryptage vigenere

Contenu du snippet

Ce programme écrit en C crypte un message en utilisant la grille de Vigenere et une clé et le décrypte instantanément. Je suis débutant en C, et j'ai remarqué que mon programme ne marche qu'avec la clé 'toto'. De plus, il ne semble marcher différemment selon les compilateurs C. Un grand merci à la personne qui pourra me dire comment bien le faire marcher...

Source / Exemple :


//  Grille de Vigenere

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main()

{
     int i,j,k,l;               // Variables
     char G[37][37];            // Grille de Vigenere
	 char texte[88];            // Texte a crypter
	 char cle[88];              // Cle de codage : Dans ce programme, uniquement entrer 'toto'
	 char textecrypte[88];      // Sans commentaires...
	 char textedecrypte[88];

     for(i=0;i<37;i++)           // Boucles et conditions générant la grille automatiquement
     {
	     for(j=0;j<26;j++)

		     G[i][j]= 97 + j;

			     if (G[0][25]==122)
			     {
				     G[i][26]=32;
				     for (j=27;j<37;j++) G[i][j]= 48 + (j-27)  ;
			  }
     }

for(i=1;i<37;i++)

{

	for(j=0;j<36;j++) G[i][j]=G[i-1][j+1];
           if (j==36)  G[i][j]=G[i-1][0];

     }       					// Fin de l'algorithme

     printf("Affichage de la table:\n");

     for (i=0;i<37;i++)
     {									// Affichage de la grille de Vigenere
	     for (j=0;j<37;j++)
	     	     printf("%c",G[i][j]);

	     printf("\n");
	     }

     printf("\nFin\n");

	 printf("Entrer le texte à crypter sans caractères spéciaux svp\n");  // Condition d'entrée du texte

	  gets(texte);

	 printf("Texte entré:\n");
	 puts(texte);

	 printf("Entrer la clé:\n");
	 gets(cle);

	 printf("Clé entrée:\n");
	 puts(cle);

	for (i=0;strlen(cle)<strlen(texte);i++)			// Génération de la clé sur toute la longueur du texte (toto)
{
	cle[i+4]=cle[i];

}

printf("Clé sur toute la ligne:\n");
puts(cle);

		printf("\nCryptage en cours:\n");

													// Cryptage //

	  j=0;
	 l=0;
	 k=0;

	 for (i=0;l<strlen(texte);j++)
{

	if(G[0][j]==texte[l])
	{
		for(i=0;l<strlen(texte);i++)
		{
			if(G[i][0]==cle[l])
			{
				textecrypte[k]=G[i][j];
				k++;
				l++;
				j=0;
				break;
			}

		}

	}

}

printf("Texte crypte:\n");							// Affichage du texte crypté (sans caractères spéciaux)
puts(textecrypte);

l=0;
k=0;
for (j=0;l<strlen(texte);i++)                        // Décryptage
{

		if (G[i][0] == cle[l])
		{
                    for (j=0;l<strlen(texte);j++)
			    if (G[i][j]==textecrypte[k])
			    {
				    textedecrypte[k]=G[0][j];
				    k++;
				    l++;
				    i=0;
				    break;
			    }

		}
}
printf("Texte decrypte:\n");
puts(textedecrypte);								// Affichage du texte décrypté (avec clé 'toto')

}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.