[vc++] cryptage simple vigenère (commenté)

Soyez le premier à donner votre avis sur cette source.

Vue 9 758 fois - Téléchargée 403 fois

Description

Ce projet pour Visual C++ 6.0 est très simple,mais je le met quand même, on sait jamais, si ça peut en interesser un autre ...
La technique est celle de Vigenère, donc elle est elle aussi très simple, mais le système d'extension est lui plus compliqué ;) c'est pour simplifier la tâche...
Enfin c'est un peu le bordel...Si quelqu'un pense que j'ai fait n'importe quoi, je me ferait un plaisir d'écouter ses remarques :)

sylvainpasutto@yahoo.fr

Source / Exemple :


/*******************************************

  • Schema du cryptage Vigenère: *
  • *
  • chaine initiale...... *
  • + mot_de_passemot_de... *
  • =---------------------- *
  • texte crypté......... *
  • Gerald*
                                                                                      • /
#include <stdio.h> // printf(), fprintf()... #include <conio.h> // getch() #include <string.h> // strcpy(), strcat() #include <stdlib.h> void main(int argc,char *argv[]) { FILE *filename,*cryptedfile; // les pointeurs vers les fichiers char password[30]; // le mot de passe char filetemp[30]; // le nom du fichier unsigned int n=0; // le caractère lu unsigned int nb=0; // la position dans la chaîne du // mot de passe unsigned int len=0; // la longueur du mot de passe unsigned int taille=0; // la longueur de l'argument(nom du // fichier à crypter) char tmp=0; // la variable nulle if (argc != 2) { // Si l'utilisateur n'a pas mis les bons parametres, // on lui indique la syntaxe printf("\a\nusage : BSCryptDos infile\n"); // on attend la saisie de l'utilisateur getch(); } else { for(int gg=0;gg<argc;gg++) { // affichage de tout les paramètres printf("%d:%s\n",gg,argv[gg]); } printf("password:"); // on demande à l'utilisateur gets(password); // son mot de passe len = strlen(password); // puis on calcul sa taille taille = strlen(argv[1]);// ainsi que celle de l'argument strcpy(filetemp,argv[1]);// puis on copie l'argument dans // la chaîne prévue à cet effet do { // on recherche dans taille--; // la chaîne "filetemp" } // le caractere 'point' while (filetemp[taille] != '.'); // puis on le remplace filetemp[taille] = '\0'; // par le caractere fin de chaîne // on ouvre le fichier à crypter: si fopen() renvoie 'NULL', // c'est que ça a planté if ((filename = fopen(argv[1],"rb+")) != NULL) { // on remplace l'estension par l'estension '.bsc' strcat(filetemp,".bsc"); // on crée le fichier qui sera crypté if ((cryptedfile = fopen(filetemp,"wb+")) != NULL) { for (int i=0;;i++) { nb++; // à chaque tour, on passe du // premier caractere du mot de // passe au second, et ainsi // de suite; if (nb>len) nb=0; // si nb est plus grand que len, // c'est qu'on est à la fin du // mot de passe, donc on revient // au début tmp += password[nb]; // on rajoute 1 au password pour // éviter les caracteres 'null' // (voir message de Croqmort) n = fgetc(filename); // on lit un caractere dans le // fichier non crypté if (n == EOF) break; // on vérifie si on est pas à la // du fichier non crypté // enfin, on écrit sous forme de caractere la valeur // ASCII du caractere lu ajoutée à la position // correspondante dans le mot de passe fprintf(cryptedfile,"%c",n + tmp); } } // on informe l' utilisateur que c'est fini ;) printf("\ncryptage termine"); } } }

Conclusion :


Remarque: la source du décrypteur est séparée de celle du crypteur, pour plus de clarté.Elle se trouve dans le Zip.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Gerald
Messages postés
31
Date d'inscription
dimanche 15 juillet 2001
Statut
Membre
Dernière intervention
8 janvier 2009
-
Merci c'est sympa
J'ai mis sur mon site un programme qui s'appel "cryptages", et qui utilise une version orientée objet de l'algo; de plus il gère les modes CBC et CFB, sans compter les autres algos: BlowFish et Rijndael(AES), tous au format classes.
http://sheeps.free.fr/ sylvainpasutto@yahoo.fr
cs_LordBob
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
8 -
c clair, ta source est tres interressante et permettra surement a de nombreux debutant de commencé le cryptage...
cs_Merlin59
Messages postés
3
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
30 janvier 2006
-
je pense que l'une des manière de rendre plus sur un cryptage, quelque soit l'algo utilisé est le CBC avec vecteur d'init.
Je m'explique, on genère une chaîne aléatoire (ou presque) de 64bits, qu'on ajoute au début du fichier, puis on combine la sortie de 64bits cryptés précendent par XOR avec la nouvelle entrée de 64bits.
Les 64bits aléatoires étant le vecteur d'initialisation.
Le combinage de la sortie précédente avec l'entrée en cours étant le mode CBC.
cs_Gerald
Messages postés
31
Date d'inscription
dimanche 15 juillet 2001
Statut
Membre
Dernière intervention
8 janvier 2009
-
fgets n'est pas sensé récupérer la chaine dans un fichier?????
Parceque autrement ça devient un peu le bordel pour récupérer le mot de passe...
Sinon ben merci pour l'info ;-)
vince2002
Messages postés
1
Date d'inscription
samedi 2 mars 2002
Statut
Membre
Dernière intervention
2 mars 2002
-
Il ne faut jamais utiliser gets() à cause des trous de sécurité.
Il vaut mieux utiliser fgets() qui est + robuste.

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.

Du même auteur (cs_Gerald)