Programme de protection password crypté avec gestion du caractère ' * '

Contenu du snippet

J'ai vu sur le site que plusieurs personnes proposent des programmes de
mot de passe.
Le problème c'est que la plupart du temps les mots de passes
apparaîssent en clair lorsqu'on ouvre le programme avec un éditeur hexaécimal.
J'ai donc développé un programme de mot de passe crypté
avec gestion du caractère '*' lors de la saisie du mot de passe.
Le premier programme consiste à choisir son mot de passe.
Celui-ci sera crypté par la méthode de cryptage de Cesar
puis stocker dans un fichier password.txt.
Le deuxième programme c'est le programme de protection.
L'utilisateur entre son mot de passe, le programme stock et crypte la saisie
de l'utilisateur et le compare à la chaîne de caractères du fichier password.
J'ai choisi comme algorithme de cryptage la méthode Cesar
pour commencer au tant faire simple.
PS: J'ai mis les deux sources sur la même page, donc n'oublier
pas de coller séparement le code de chaque programme dans 2 fichiers differents.

Source / Exemple :


/*****************************************/
/* Programme permettant à l'utilisateur de              */
/* définir son mot de passe                                      */
/* le mot de passe sera crypté et stocké dans le     */
/* fichier password.txt                                              */
/*                                                                              */
/* cryptage : Methode de Cesar                               */
/* Developpé par : Jarod1980                                  */
/*                                                                              */
/*****************************************/

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

#define LONG_MOT 100

void CESAR(char *, int cle); /* --- PROTOTYPE FONCTION CESAR --- */

int main(int argc, char *argv[])
{
 
 char passcheck[LONG_MOT];
 int cle;
 
 FILE *fichier;
 fichier=fopen("password.txt","wt");
 
 cle=15; /* clé de cryptage vous pouvez la changer à 
                  condition que : 1<cle<25 */  

 printf("\nEnter Password:");  /* choix de votre mot de passe */
 scanf("%s",&passcheck);  /* on le stock dans passcheck */  
 CESAR(passcheck,cle); /* on appel la fonction CESAR */
 fprintf(fichier,"%s\n",passcheck); /* on sauvegarde le password crypté 
                                              dans password.txt */
 fclose(fichier); /* on ferme le fichier */
 return 0;
}
void CESAR(char *mot, int cle) /* ---- DEFINITION Fonction Cesar ---- */
{
int i, n;
for (i=0;i<strlen(mot)-1;i++) 
{
mot[i] = tolower(mot[i]); /*CONVERSION en minuscule au cas où*/
if (mot[i] != 32) /*CHIFFREMENT des caracteres autres que ESPACE*/
{
n = mot[i]+cle; /*CONVERSION du Char mot[i] en Int */
if (n<=122) /*CHIFFREMENT de mot[]*/
{
mot[i] = n; /*AFFECTATION de Int n dans Char mot[i]*/
}
else
{
n = n - 26;
mot[i] = n; /*AFFECTATION de Int n dans Char mot[i]*/
}
}
else /*CHIFFREMENT de ESPACE en ESPACE*/
{
mot[i] = 32;
}
}
mot[strlen(mot)-1] = 0; /*AFFECTATION ('\0') (NULL) (Code 0) 
                                                 en fin de chaine*/
} 

-------------%<---------COUPER-----ICI-------%<------------COUPER-----ICI-----%<-------------------

/*******************************/
/* Programme de protection password*/ 
/* avec gestion du caractère '*' lors de*/ 
/* la saisie au clavier par l'utilisateur    */
/* de son mot de passe.                       */
/*                                                          */
/* Developpé par: Jarod1980               */
/*******************************/

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

#define LONG_MOT 100

void CESAR(char *, int cle); /* --- PROTOTYPE FONCTION CESAR --- */

int main(int argc, char *argv[])
{
  char pass[LONG_MOT];
  char str[100];
  int cle;
  int num;
  FILE *fichier;
  fichier=fopen("password.txt","rb");

  cle=15;
  fscanf(fichier,"%s",&str); /* recupere la chaine de caractères 
                      ds fichier et on la stock dans str */
  fclose(fichier);     /* On ferme fichier */
  
  do {
  printf("\nEnter Password:");
  if (num !=100) {                                     
  num=0;                                              /*GESTION*/
  while((pass[num]=getch()) != 13) {    /*DU*/
  putchar('*');                                      /*CARACTERE*/
  num++;                                          /*ETOILE*/
  }}                                                           
  pass[num]='\0';                                      

  CESAR(pass,cle); /* On appel Cesar pour crypter la saisie */
  }
  while(strcmp (str,pass) != 0); /* On compare les 
                                              2 chaînes de caractères */
  printf("\n\nHello!");
  return 0;
}
void CESAR(char *mot, int cle) /* ---- DEFINITION Fonction Cesar ---- */
{
int i, n;
for (i=0;i<strlen(mot)-1;i++)
{
mot[i] = tolower(mot[i]); /*CONVERSION en minuscule au cas où*/
if (mot[i] != 32) /*CHIFFREMENT des caracteres autres que ESPACE*/
{
n = mot[i]+cle; /*CONVERSION du Char mot[i] en Int*/
if (n<=122) /*CHIFFREMENT de mot[]*/
{
mot[i] = n; /*AFFECTATION de Int n dans Char mot[i]*/
}
else
{
n = n - 26;
mot[i] = n; /*AFFECTATION de Int n dans Char mot[i]*/
}
}
else /*CHIFFREMENT de ESPACE en ESPACE*/
{
mot[i] = 32;
}
}
mot[strlen(mot)-1] = 0; /*AFFECTATION ('\0') (NULL) (Code 0) 
                                         en fin de chaine */
}

Conclusion :


Voila, le but maintenant c'est de mettre un algorithme un
peu plus balèze que la méthode de Cesar.
Si vous avez des idées ou des remarques n'hésiter
à me contacter.

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.