begin process at 2013 05 23 04:28:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CHIFFREMENT DE VIGENERE

CHIFFREMENT DE VIGENERE


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :vigenere, chiffrement, déchiffrement, sécurite, systeme Niveau :Débutant Date de création :05/12/2011 Date de mise à jour :05/12/2011 18:47:09 Vu / téléchargé :3 088 / 96

Auteur : lajouad

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
ce code permet un cryptage et decryptage de vigenere.
pour executer le programme :
compiler
en ligne de commande taper : vigenere.exe -c -pwd nomfichier
pwd : le mot de passe pour le cryptage.
nomfichier : le nom de fichier à crypter

pour le decryptage : mm syntaxe en replacant c par d.

Source

  • /*
  • Name: vigenere
  • Copyright: Mars 2011
  • Author: Lajouad Rachid
  • Date: 06/03/11 22:00
  • Description: cryptage et décryptage par la méthode de viginère
  • avec une ligne de commande
  • */
  • # include <stdio.h>
  • # include <stdlib.h>
  • # include <string.h>
  • char Crypt(char,char*);
  • char Decrypt(char,char*);
  • int main(int argc,char *argv[]) {
  • if(argc < 4) {
  • printf("syntax error : \n"
  • "Syntaxe de la commande : \n\n\t"
  • "%s -{c|d} -pwd NomFichier\n",argv[0]);
  • getchar();
  • exit(1);
  • }
  • if(strcmp(argv[1],"-c") == 0) {
  • FILE *fs, *fd;
  • char fname[200],pwd[10];
  • char c;
  • fs = fopen(argv[3],"rb+");
  • if(fs == NULL) {
  • printf("syntax error : \n"
  • "Syntaxe de la commande : \n\n\t"
  • "%s -{c|d} -pwd NomFichier\n",argv[0]);
  • printf("\n\n fichier inexistant ... Retype command ... ");
  • getchar();
  • exit(1);
  • }
  • strcpy(fname,argv[3]);
  • fname[strlen(argv[3])-3] = 'v';
  • fname[strlen(argv[3])-2] = 'i';
  • fname[strlen(argv[3])-1] = 'g';
  • fd = fopen(fname,"wb+");
  • // sauvegarder l'extension à l'interieur du fichier crypté
  • fprintf(fd,"%c",argv[3][strlen(argv[3])-3]);
  • fprintf(fd,"%c",argv[3][strlen(argv[3])-2]);
  • fprintf(fd,"%c",argv[3][strlen(argv[3])-1]);
  • while( !feof( fs ) ) {
  • fscanf(fs,"%c",&c);
  • fprintf(fd,"%c",Crypt(c,argv[2]));
  • }
  • fclose(fs); fclose(fd);
  • }
  • else if(strcmp(argv[1],"-d") == 0) {
  • FILE *fs, *fd;
  • char fname[200],pwd[10];
  • char c;
  • int j = 0;
  • fs = fopen(argv[3],"rb+");
  • if(fs == NULL) {
  • printf("\n\n fichier inexistant ... Retype command ... ");
  • exit(1);
  • }
  • strcpy(fname,argv[3]);
  • //rerstauration de l'extension du fichier
  • while( !feof( fs ) ) {
  • if( j < 3) {
  • j++;
  • fscanf(fs,"%c",&c);
  • fname[strlen(argv[3])-4+j] = c;
  • }
  • else {
  • if(j == 3) fd = fopen(fname,"wb+");
  • j++;
  • fscanf(fs,"%c",&c);
  • fprintf(fd,"%c",Decrypt(c,argv[2]));
  • }
  • }
  • fclose(fs); fclose(fd);
  • }
  • else {
  • printf("commutateur inconnu ...\n\n");
  • printf("syntax error : \n"
  • "Syntaxe de la commande : \n\n\t"
  • "%s -{c|d} -pwd NomFichier\n",argv[0]);
  • exit(1);
  • }
  • printf("\n\n\t\t\tsuccess ... cryptage terminé");getchar();
  • }
  • char Crypt(char c,char *pwd){
  • static int i;
  • if(++i >= strlen(pwd)) i = 0;
  • return (c + (pwd[i] - '0'));
  • }
  • char Decrypt(char c,char *pwd){
  • static int i;
  • if(++i >= strlen(pwd)) i = 0;
  • return (c - (pwd[i] - '0'));
  • }
/*
  Name: vigenere
  Copyright: Mars 2011
  Author: Lajouad Rachid
  Date: 06/03/11 22:00
  Description: cryptage et décryptage par la méthode de viginère
  avec une ligne de commande
*/

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

char Crypt(char,char*);
char Decrypt(char,char*);

int main(int argc,char *argv[]) {
    if(argc < 4) {
            printf("syntax error : \n"
                   "Syntaxe de la commande : \n\n\t"
                   "%s -{c|d} -pwd NomFichier\n",argv[0]);
                   getchar();
            exit(1);
            }
    if(strcmp(argv[1],"-c") == 0) {
         FILE *fs, *fd;
         char fname[200],pwd[10];
         char c;
         fs = fopen(argv[3],"rb+");
         if(fs == NULL) {
               printf("syntax error : \n"
                   "Syntaxe de la commande : \n\n\t"
                   "%s -{c|d} -pwd NomFichier\n",argv[0]);
               printf("\n\n fichier inexistant ... Retype command ... ");
               getchar();
               exit(1);
               }
         strcpy(fname,argv[3]);
         fname[strlen(argv[3])-3] = 'v';
         fname[strlen(argv[3])-2] = 'i';
         fname[strlen(argv[3])-1] = 'g';
         fd = fopen(fname,"wb+");
// sauvegarder l'extension à l'interieur du fichier crypté
         fprintf(fd,"%c",argv[3][strlen(argv[3])-3]);      
         fprintf(fd,"%c",argv[3][strlen(argv[3])-2]);
         fprintf(fd,"%c",argv[3][strlen(argv[3])-1]);
         while( !feof( fs ) ) {
                fscanf(fs,"%c",&c);
                fprintf(fd,"%c",Crypt(c,argv[2]));
                }
         fclose(fs); fclose(fd);
    }
    
    else if(strcmp(argv[1],"-d") == 0) {
         FILE *fs, *fd;
         char fname[200],pwd[10];
         char c;
         int j = 0;
         fs = fopen(argv[3],"rb+");
         if(fs == NULL) {
               printf("\n\n fichier inexistant ... Retype command ... ");
               exit(1);
               }
         strcpy(fname,argv[3]);
         //rerstauration de l'extension du fichier
         while( !feof( fs ) ) {
                if( j < 3) {
                    j++;
                    fscanf(fs,"%c",&c);
                    fname[strlen(argv[3])-4+j] = c;
                     }
                else {
                  if(j == 3) fd = fopen(fname,"wb+");
                  j++;
                  fscanf(fs,"%c",&c);
                  fprintf(fd,"%c",Decrypt(c,argv[2]));
                  }
                }         
         fclose(fs); fclose(fd);
    }
    else {
         printf("commutateur inconnu ...\n\n");
            printf("syntax error : \n"
                   "Syntaxe de la commande : \n\n\t"
                   "%s -{c|d} -pwd NomFichier\n",argv[0]);
            exit(1);         
         }
    printf("\n\n\t\t\tsuccess ... cryptage terminé");getchar();
    }


char Crypt(char c,char *pwd){
     static int i;
     if(++i >= strlen(pwd)) i = 0;
     return (c + (pwd[i] - '0'));     
     }
     
char Decrypt(char c,char *pwd){
     static int i;
     if(++i >= strlen(pwd)) i = 0;
     return (c - (pwd[i] - '0'));  
     }

 Conclusion

j'attend vos commentaires ..



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture SCANNER FLEX
Source avec Zip Source avec une capture GENERE BMP
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE
Source avec Zip SCANNER LANGAGE

 Sources de la même categorie

Source avec Zip Source avec une capture FONCTIONS EN ACTION par ringo73
CALCUL DE PI AVEC LA BIBLIOTHÈQUE GMP par lann
Source avec Zip Source avec une capture MAGEO3D, POUR GÉRER LES POINTS ET LES VECTEURS DE L'ESPACE R... par pgl10
Source avec Zip Source avec une capture ALGORITHME ACO TOILE D'ARAIGNÉE par RyBeN
Source avec Zip Source avec une capture TRAITEMENT D'IMAGE EN C++, QT par Akham75

 Sources en rapport avec celle ci

Source avec Zip A2DCRYPT - CRYPTAGE 2048 BITS par darkor
Source avec Zip Source avec une capture ELGAMALCIPHER par CHAR As Human
Source avec Zip CHIFFREMENT AES UTILISANT LES API WINDOWS (CSP) par Proutix
Source avec Zip Source avec une capture SYSTÈME SOLAIRE OPEN GL AVEC BIBLIOTHÈQUE GLUT : 5 PLANETES ... par gabule
Source avec Zip Source avec une capture EXPLORER WINDOWS SANS MFC par ebooserge

Commentaires et avis

Commentaire de Yannikator le 06/12/2011 09:07:11

Salut,

Une chose que je comprends pas... Pourquoi la soustraction par le char '0'?

Normalement le cryptage de Vigénère consiste à faire seulemet : c - pwd[i] non?

A+

Commentaire de CptPingu le 06/12/2011 19:46:19 administrateur CS

En C, on soustrait par '0' pour convertir un char en nombre (à condition que le char soit bien entre 0 et 9).
Ex:
char c = '5';
int i = c - '0'; // i vaudra 5

Attention, on a ici affaire à un chiffrement et non à un "cryptage". Voir la différence: http://www.cppfrance.com/forum/sujet-CS-CORRECTION-TITRE-THEME-FORUM_1387875.aspx

Commentaire de Yannikator le 10/12/2011 13:28:39

Mais c'est un miracle!
C'est de la magie...
Non enfaite, j'avais pas réfléchit... -_-  
Le fait de soustraire par le caractère '0' comme il est fait pour calculer l'entier i, reviens à faire le calcule suivant:
i = 65 - 60 ( 65 et 60 étant respectivement les codes ascii de 5 et 0).

Sinon c'est intéressant de référencer la différence entre crypter et chiffrer. Il est vrai que je fais moi même l'erreur.

A+

Commentaire de LeFauve42 le 12/12/2011 18:16:05

Bonjour,

Quelques commentaires :
- Il y a des moyens plus simples en C pour gérer les noms de fichier, et en particulier récupérer leur extension sans utiliser plusieurs strlen, qui est une operation couteuse).
- Tes fonctions Crypt et Decrypt gardent une variable static pour l'avancement dans le mot de passe, mais pourquoi leur passer à chaque appel le pwd (qui ne change pas) et surtout recalculer le strlen() du pwd ?
Dans l'ideal tu pourrais utiliser une class pour garder le pwd, la position et la longuer du mot de passe. En C "ansi" comme c'est le cas ici tu devrais pouvoir "feinter" en appelant ta fonction une première fois avec le pwd, et les fois suivantes avec NULL. Ca donnerait :

char Crypt(char c,char *passwd){
     static int i, len;
     static char* pwd;
     if(passwd){
          pwd = passwd;
          len = strlen(pwd);    
          i=0;
          return 0;
     }
     else
     {
       if(++i >= len) i = 0;
       return (c + (pwd[i] - '0'));    
     }
}

C'est une implementation tres moche (l'alternative etant d'utiliser des variables globales et deux fonctions differentes pour initialiser l'operation et pour (de)crypter, mais sans te lancer dans du C++ je ne vois pas mieux (quelqu'un a une idee ?)
En tous cas ca devrait bien accelerer ton programme.
Note que ta fonction n'a pas l'air de fonctionner pour toutes les valeurs de caractère. Par exemple si la cle contient £ (code ASCII 156) et le texte aussi, le cryptage va donner 156+156-'0' = 312-48 = 264, ce qui ne rentre pas dans un char.

Eric

Commentaire de LeFauve42 le 12/12/2011 18:19:57

> i = 65 - 60 ( 65 et 60 étant respectivement les codes ascii de 5 et 0).

Euh, en quelle base ? :o)

En décimal, 65 = "A" et 60 = "<". En Hexa, 65 = "e" et 60 = "`"...
'0' = 30 en hexa ou 48 en décimal.

Commentaire de lajouad le 13/12/2011 14:51:51

C'est vrai. tout a fait d'accord. Une grande différence entre cryptage et chiffrement.
Pour les autres remarques je vais en tenir compte dans mon prochain version ducode ....


merci

Commentaire de Yannikator le 13/12/2011 23:30:18

En effet, autant pour moi, j'ai pris les valeurs en octal dsl, je me suis un peu précipité... Bon, ça ne change rien au raisonnement...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

architecture systeme [ par gus ] Qu'est ce qu'une sémaphore?Qu'est ce que la mémoire partagée?Merci SYSTEME D'EXPLOITATION [ par nilufacou ] Je sais qu'il existe un et même plusieur système d'exploitation (de type Linux) qui sont sur un cd-rom et on boote dessus. Pas besoin de disque dur sa lancer une commande systeme sur un unix [ par Sioban ] Je souhaite lancer un commande systeme de type un "ls -l nom_du_fichier.dat" sur un serveur unix via mon PC(XP). (Pour avoir le nombre de ligne de cer Probléme de variable externe [ par mateo40 ] J'ai un problème !! (pas tres original comme intro...)Je travaile sous Builder C++.J'ai 2 fichiers DES.h et DES.cpp qui contiennent une classe dédiée Recherche : Résolution de systeme d'equation matricielle [ par julien81 ] Bonjour tlm En fait cette année j'ai un sujet pour mon projet annuel c'est de faire le prog pour resoudre un systeme d'equation avec des matrice (dime [TC++3.0] pb d'affichage de l'heure du systeme!!!!! [ par kobee12 ] J'ai essaye d'afficher l'heure du systeme avec la structure 'dostime_t'. Seulement a chaque fois que j'affiche l'heure il m'ecrit un truc du style : ' Le carnet d'adresse outlook et le C/C++ [ par zinotron ] Je suis a la recherche d'un systeme pour gerer le carnet d'adresse d'oulook en C.par ex-&gt; que ca puisse me sortir toutes les entrées du carnet, ou executer une commande systeme [ par anthraxx ] bonjour,je voulais savoir si quelqu'un connait un moyen d'éxecuter des commandes su systemes d'exploitation sous Windows, et d'en récupérer l'output.I A vore avis... [ par DeAtHCrAsH ] A votre avis quel est la solution la moins couteuse en ressource systeme pour declencher une procedure de mon application a un moment donné ?Je m'expl comment connaitre le systeme utilisé (XP, 2000, 98) [ par gege1024 ] voila, j'ai une appli MFC,mais je dois adapter le graphisme en fct du systeme windows d'ou sera executé mon programme.comment savoir si c'est XP,2000,


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales