Algorithme de Vigenere en C

Algorithme de Vigenere en C - C - Programmation

Marsh Posté le 06-01-2006 à 17:20:37    

Salut, donc voilà mon problème : je cherche à écrire l'algorithme de Vigenere en C (uniquement le cryptage). Je vous donne le lien pour que vous compreniez de quoi il s'agit : http://www.chez.com/algor/vigenere.htm
 
J'ai essayé de l'écrire en C, sous VisualC ++6 quand je compile je n'ai aucune erreur mais lors de l'exécution ça plante si je puis dire. Voilà mon programme si qq'un pouvait essayer de m'aider ce serait vraiment sympa merci bcp.
 
 
 
 
void main()
{
    char Cle[80];
    char Phrase[800];
    char Alpha[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','\0'};
    char cod[800];
    int posCle = 0;
     
    printf("Cle:" );
    scanf("%s",Cle);
    printf("Phrase a coder:" );
    scanf("%s",Phrase);
    int lenphrase = strlen(Phrase);
    int lencle = strlen(Cle);
    int i;
    char LetCle;
    char* PosLetCle;
    char Let;
    char* Pos;
    int NouvPos;
     
    for(i=0;i<lenphrase;i++)
     
   
   
   
  /* on gere la progression dans la cle */
 
 
 {
         
         posCle = posCle+1;
        if (posCle > lencle)
           posCle = 1;
         
   
  /* on determine quelle est la lettre cle et sa position dans l'alphabet */
   
 
  LetCle = Cle[posCle];
        PosLetCle = strchr(Alpha, LetCle);
         
  /* on determine la position de la lettre a coder et le decalage a appliquer */
 
   
  Let = Phrase[i];
        Pos = strchr(Alpha, Let);  
        NouvPos = *Pos + *PosLetCle;
        if (NouvPos > 26)
           NouvPos = NouvPos - 26;
        char chartest = Alpha[NouvPos];
        char *strcat(char *cod, const char *chartest);
 
     
    printf("la phrase codee est:\n", cod);
     
 
 }
 
 
}

Reply

Marsh Posté le 06-01-2006 à 17:20:37   

Reply

Marsh Posté le 06-01-2006 à 19:37:54    

Xavi64 a écrit :

Salut, donc voilà mon problème : je cherche à écrire l'algorithme de Vigenere en C (uniquement le cryptage). Je vous donne le lien pour que vous compreniez de quoi il s'agit : http://www.chez.com/algor/vigenere.htm
 
J'ai essayé de l'écrire en C, sous VisualC ++6 quand je compile je n'ai aucune erreur


Essaye un meilleur compilateur, ou apprends à le regler...


Project   : OP code
Compiler  : GNU GCC Compiler (called directly)
Directory : C:\dev\forums\OP\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
main.c:2: error: conflicting types for 'main_'
C:/clib/frmwrk/inc/main.h:36: error: previous declaration of 'main_' was here
main.c:2: error: conflicting types for 'main_'
C:/clib/frmwrk/inc/main.h:36: error: previous declaration of 'main_' was here
main.c: In function `main_':
main.c:9: error: implicit declaration of function `printf'
main.c:9: warning: nested extern declaration of `printf'
<internal>:0: warning: redundant redeclaration of 'printf'
main.c:10: error: implicit declaration of function `scanf'
main.c:10: warning: nested extern declaration of `scanf'
<internal>:0: warning: redundant redeclaration of 'scanf'
main.c:13: error: implicit declaration of function `strlen'
main.c:13: warning: nested extern declaration of `strlen'
<internal>:0: warning: redundant redeclaration of 'strlen'
main.c:41: error: implicit declaration of function `strchr'
main.c:41: warning: nested extern declaration of `strchr'
<internal>:0: warning: redundant redeclaration of 'strchr'
main.c:52: warning: declaration of 'cod' shadows a previous local
main.c:6: warning: shadowed declaration is here
main.c:52: warning: declaration of 'chartest' shadows a previous local
main.c:51: warning: shadowed declaration is here
main.c:52: warning: nested extern declaration of `strcat'
main.c:55: warning: too many arguments for format
main.c:51: warning: unused variable `chartest'
main.c:61:2: warning: no newline at end of file
Process terminated with status 1 (0 minutes, 0 seconds)
8 errors, 12 warnings


Quelques commentaires et corrections rapides (-ed-) :


 
/* -ed- manquait pour printf()...  */
#include <stdio.h>
 
/* -ed- manquait pour strlen()...  */
#include <string.h>
 
/* -ed- main() retourne int. Toujours. */
int main(void)
{
   char Cle[80];
   char Phrase[800];
 
   /* -ed-
       char Alpha[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','\0'};
 
   Une facon compliquee d'ecrire
   */
   char Alpha[] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
 
   char cod[800];
   int posCle = 0;
 
   printf("Cle:" );
   /* -ed- manque un '\n' ou un fflush (stdout);
 
           http://mapage.noos.fr/emdel/notes.htm#fflush_stdout
   */
   fflush (stdout);
 
   scanf("%s", Cle);
   printf("Phrase a coder:" );
 
   fflush (stdout);
   scanf("%s", Phrase);
 
   /* -ed- construction interdite en C90... Ajoute bloc. */
   {
      int lenphrase = strlen(Phrase);
      int lencle = strlen(Cle);
      int i;
      char LetCle;
      char* PosLetCle;
      char Let;
      char* Pos;
      int NouvPos;
 
      for (i = 0; i < lenphrase; i++)
      {
         /* on gere la progression dans la cle */
 
         posCle = posCle + 1;
         if (posCle > lencle)
            posCle = 1;
 
 
         /* on determine quelle est la lettre cle et sa position dans l'alphabet */
 
 
         LetCle = Cle[posCle];
         PosLetCle = strchr(Alpha, LetCle);
 
         /* on determine la position de la lettre a coder et le decalage a appliquer */
 
 
         Let = Phrase[i];
         Pos = strchr(Alpha, Let);
         NouvPos = *Pos + *PosLetCle;
 
         /* -ed- se renseigner sur l'operateur MODULO (%) */
         if (NouvPos > 26)
            NouvPos = NouvPos - 26;
 
         {
            /* -ed-
                  char chartest = Alpha[NouvPos];
            pas utilise. C'est louche... */
 
            /* -ed-
                     char *strcat(char *cod, const char *chartest);
            c'est quoi ce prototype au mileu du code ? Il est sorti de sa cage ? */
 
 
            /* -ed-
            printf("la phrase codee est:\n", cod);
            manque un formatteur. */
            printf("la phrase codee est: '%s'\n", cod);
         }
 
      }
   }
   return 0;
}

Message cité 1 fois
Message édité par Emmanuel Delahaye le 06-01-2006 à 20:20:19

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 06-01-2006 à 21:05:48    

Emmanuel Delahaye a écrit :

Quelques commentaires et corrections rapides (-ed-) :


 
/* -ed- manquait pour printf()...  */
#include <stdio.h>
 
/* -ed- manquait pour strlen()...  */
#include <string.h>
 
/* -ed- main() retourne int. Toujours. */
int main(void)
{
   char Cle[80];
   char Phrase[800];
 
   /* -ed-
       char Alpha[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','\0'};
 
   Une facon compliquee d'ecrire
   */
   char Alpha[] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
 
   char cod[800];
   int posCle = 0;
 
   printf("Cle:" );
   /* -ed- manque un '\n' ou un fflush (stdout);
 
           http://mapage.noos.fr/emdel/notes.htm#fflush_stdout
   */
   fflush (stdout);
 
   scanf("%s", Cle);
   printf("Phrase a coder:" );
 
   fflush (stdout);
   scanf("%s", Phrase);
 
   /* -ed- construction interdite en C90... Ajoute bloc. */
   {
      int lenphrase = strlen(Phrase);
      int lencle = strlen(Cle);
      int i;
      char LetCle;
      char* PosLetCle;
      char Let;
      char* Pos;
      int NouvPos;
 
      for (i = 0; i < lenphrase; i++)
      {
         /* on gere la progression dans la cle */
 
         posCle = posCle + 1;
         if (posCle > lencle)
            posCle = 1;
 
 
         /* on determine quelle est la lettre cle et sa position dans l'alphabet */
 
 
         LetCle = Cle[posCle];
         PosLetCle = strchr(Alpha, LetCle);
 
         /* on determine la position de la lettre a coder et le decalage a appliquer */
 
 
         Let = Phrase[i];
         Pos = strchr(Alpha, Let);
         NouvPos = *Pos + *PosLetCle;
 
         /* -ed- se renseigner sur l'operateur MODULO (%) */
         if (NouvPos > 26)
            NouvPos = NouvPos - 26;
 
         {
            /* -ed-
                  char chartest = Alpha[NouvPos];
            pas utilise. C'est louche... */
 
            /* -ed-
                     char *strcat(char *cod, const char *chartest);
            c'est quoi ce prototype au mileu du code ? Il est sorti de sa cage ? */
 
 
            /* -ed-
            printf("la phrase codee est:\n", cod);
            manque un formatteur. */
            printf("la phrase codee est: '%s'\n", cod);
         }
 
      }
   }
   return 0;
}



 
Tu t'en donnes du mal - Parfois je t'admire...
 
PS: J'ai lu tous tes commentaires (il y en aura au-mois un !!!)


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed