Partage
  • Partager sur Facebook
  • Partager sur Twitter

Générateur de mot de passe

Sujet résolu
    18 février 2006 à 22:36:45

    Bonsoir (à nouveau).

    J'ai essayé de créer un petit programme assez simple: un générateur de mot de passe.

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

    void passgen(const long nombreCaracteres, char* mdp);

    int main(int argc, char *argv[])
    {
        long nombreCaracteres = 0;
        char mdp[100];

        printf("Nombre de caracteres du mot de passe: ");
        scanf("%ld", &nombreCaracteres);

        passgen(nombreCaracteres, mdp);
    }

    void passgen(const long nombreCaracteres, char* mdp)
    {
        long i, d = nombreCaracteres, random;
        char caracteres[62];
        const long MAX = 61, MIN = 0;

        sprintf(caracteres, "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");

        printf("\nMot de passe genere dans: %ld", d);

        for (i = 0 ; i < nombreCaracteres ; i++)
        {
            sleep(1000);

            srand(time(NULL));
            random = rand() % (MAX - MIN + 1) + MIN;
            mdp[i] = caracteres[random];

            d -= 1;

            printf("...%ld", d);
        }

        mdp[i] = '\0';

        printf("\n\nMot de passe: %s", mdp);
    }

    Ce code fonctionne mais il ne fait pas ce que j'attendait réellement.

    Premièrement, je suis obligé de faire un sleep pour que le la valeur de time() soit modifiée et qu'un nombre aléatoire puisse être géré. Ce qui est très génant parce que je dois attendre autant de secondes qu'il y a de caractères.

    Deuxièmement, les caractères ne sont pas totalement aléatoires, je veux dire par là que le mot de passe généré est dans l'ordre alphabétique. En effet, pour créer le mot de passe, la fonction parcrours le tableau de caractères dans l'ordre. Par exemple vous n'aurez jamais comme mot de passe 85029, mais vous aurez 02589.

    Je ne sais pas si j'ai été assez clair sur le deuxième point.
    Merci quand même de vos futures réponses.
    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2006 à 22:53:19

      Salut, Bah tu pourrais toujours faire un nombre aléatoire entre 65-91 (Voir tableaux des caractêres ASCII) et apres faire un printf avec "%c" pour afficher le chiffre en lettre. Je ne sais pas si tu comprend.
      • Partager sur Facebook
      • Partager sur Twitter
        18 février 2006 à 22:57:13

        C'est une autre manière de procéder mais qui ne résoudrait aucune des deux problèmes.
        Il faudrait toujours le sleep pour que le nombre aléatoire ai la même valeur et il irait d'un nombre à un autre plus grand.
        • Partager sur Facebook
        • Partager sur Twitter
          18 février 2006 à 23:04:32

          bah met le
          srand(time(NULL));

          en dehors de ton for.
          • Partager sur Facebook
          • Partager sur Twitter
            18 février 2006 à 23:12:04

            Merci ça marche. :euh:

            Mais j'ai pas compris pourquoi, qu'est-ce que ça change qu'il soit à l'intérieur ou à l'extérieur du for?
            • Partager sur Facebook
            • Partager sur Twitter
              18 février 2006 à 23:13:47

              Bah srand il faut le faire une seule fois, ca initialise le générateur de nombre aléatoire.
              • Partager sur Facebook
              • Partager sur Twitter
                19 février 2006 à 1:01:12

                Pour un complément d'information, tu as un bon cours ici :
                http://nicolasj.developpez.com/articles/hasard/
                • Partager sur Facebook
                • Partager sur Twitter
                  19 février 2006 à 1:04:33

                  Tres interessant ce cours, on comprends donc pourquoi il fallait un sleep :)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Générateur de mot de passe

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown