IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Générateur de mot de passe en C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Générateur de mot de passe en C#
    Bonjour bonjour tout le monde !

    Je code actuellement un mini programme en C# pour générer un ou plusieurs mots de passe avec une certaine complexité (minuscules, maj, caractères spéciaux, chiffres) et d'une longueur choisie par l'utilisateur. Rien de bien folichon me direz-vous mais voilà, je suis pas très futte-futte niveau progra, c'est juste pour me faciliter les choses par la suite pour le boulot (admin système)

    Donc concrètement, j'ai une fonction "generate" qui se charge de construire un mot de passe.
    j'ai un bouton, qui quand il est cliqué, lance la génération du mot de passe seul et l'affiche dans une textbox.
    J'ai un second bouton qui lui, lorsqu'il est appuyé, génère un nombre (choisi par l'utilisateur) de mots de passe et les affiche dans une listbox.

    pour le second bouton, j'ai un problème : il m'affiche 2 fois le même mdp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    private void genMultiple_Click(object sender, EventArgs e)
            {
                int nbPasswd = int.Parse(domainPasswd.Text);
                passwdlist.Clear();
                for (int i = 0; i < nbPasswd; i++)
                {
                    password = "";
                    password = generate();
                    passwdlist.Add(password);
                }
                for (int i = 0; i < passwdlist.Count; i++)
                {
                    list.Items.Add(passwdlist[i]);
                }
            }
    Je sais que l'erreur est toute bête mais je n'arrive pas à la trouver...

    Toute aide serait la bienvenue :-) Merci d'avance !

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Surement la fonction Generate() qui retourne deux fois le même mot de passe. Il suffit de vérifier avec un débogueur.
    Hypothèse aveugle : probablement car la graine est définit dans la fonction de génération.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    Bonjour ,

    En effet le problème doit venir de ta fonction generate(), nous l'expliciter pourrait être pratique .
    Moi aussi j'y vais de mon Hypothèse aveugle : Si tu utilise Random.Next méfie toi ! il est calé au temps système , essaye juste avec un thread.Sleep(500) pour voir

    Si les résultats sont alors différents , le problème vient de la.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bien le bonjour !

    Tout d'abord merci de vos réponses :-)

    Voici le code de ma fonction generate()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    private string generate()
            {
                    Random rnd = new Random();
                    int length = int.Parse(comboLen.Text);
     
                    string passwd = "";
     
                    //choix du caractère special
                    int iSpecialChar = rnd.Next(0, 5);
                    string chosenSpecChar = specialchars[iSpecialChar];
     
                    //choix aléatoire de la position du caractère spécial
                    int specialCharPosition = rnd.Next(1, length);
     
                    //MessageBox.Show(chosenSpecChar + " à la position : " + specialCharPosition);
     
                    //DEBUT : generation du mot de passe
                    for (int i = 1; i < length; i++)
                    {
                        if (i == specialCharPosition)
                            passwd += chosenSpecChar;
     
                        int jNewchar = rnd.Next(0, 3);
                        switch (chartype[jNewchar])
                        {
                            case "minuscule":
                                int iNewMinLetter = rnd.Next(0, 26);
                                string NewMinLetter = tabalphabetmin[iNewMinLetter];
                                passwd += NewMinLetter;
                                break;
                            case "majuscule":
                                int iNewCapLetter = rnd.Next(26);
                                string NewCapLetter = tabalphabetMAJ[iNewCapLetter];
                                passwd += NewCapLetter;
                                break;
                            case "nombre":
                                int iNewNumber = rnd.Next(0, 10);
                                string NewNumber = numbers[iNewNumber];
                                passwd += NewNumber;
                                break;
                        }
                    }
                    return passwd;            
            }
    encore merci du coup de main !

    PS : Pour répondre à Benoit, c'est ce que j'avais à la base mais je voulais vérifier avec une méthode différente

  5. #5
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    Tu devrais sortir ton Random de ta méthode pour qu’il s’initialise une seul fois , le phénomène vient que les nombres aléatoires en programmation ne sont pas réellement aléatoires . Je suis incapable de t'expliquer précisément , quelqu'un le fera sans aucun doute mieux que moi , en tous cas , surtout lors de boucles rapprochées le random va retourner les memes resultats, de toute manière tu pourrai le vérifier par débug .

    Donc sort le random en dehors de ta méthode ou test avec Thread.Sleep()

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Je rejoins la précédente intervention.

    Donc ceci devrait palier au problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Random rnd = new Random();
     
    private string generate()
            {
                    int length = int.Parse(comboLen.Text);
     
                    string passwd = "";
     
                    //choix du caractère special
                    int iSpecialChar = rnd.Next(0, 5);
                    string chosenSpecChar = specialchars[iSpecialChar];
     
                    //choix aléatoire de la position du caractère spécial
                    int specialCharPosition = rnd.Next(1, length);
     
                    //MessageBox.Show(chosenSpecChar + " à la position : " + specialCharPosition);
     
                    //DEBUT : generation du mot de passe
                    for (int i = 1; i < length; i++)
                    {
                        if (i == specialCharPosition)
                            passwd += chosenSpecChar;
     
                        int jNewchar = rnd.Next(0, 3);
                        switch (chartype[jNewchar])
                        {
                            case "minuscule":
                                int iNewMinLetter = rnd.Next(0, 26);
                                string NewMinLetter = tabalphabetmin[iNewMinLetter];
                                passwd += NewMinLetter;
                                break;
                            case "majuscule":
                                int iNewCapLetter = rnd.Next(26);
                                string NewCapLetter = tabalphabetMAJ[iNewCapLetter];
                                passwd += NewCapLetter;
                                break;
                            case "nombre":
                                int iNewNumber = rnd.Next(0, 10);
                                string NewNumber = numbers[iNewNumber];
                                passwd += NewNumber;
                                break;
                        }
                    }
                    return passwd;            
            }
    IMPORTANT : Si tu ouvres plusieurs fois ton programme pour générer un ensemble de mots de passe il coule de source que tu devras stocker les mots de passes générés dans une sorte de fichier de configuration. Ainsi lorsque ton programme sera exécuté ultérieurement il faudra prévoir de comparer si le mot de passe généré ne corresponds pas aux mots de passe présents dans le dit fichier de conf, sinon l'utilisateur pourrait se retrouver (après plusieurs exécution de ton programme) avec des mots de passe identiques.

    A+

  7. #7
    Invité
    Invité(e)
    Par défaut
    salut,

    ce n'est pas en lien avec ton erreur, mais pourquoi 2 boucles ?

    Citation Envoyé par theITguyInTheBasmnt Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                for (int i = 0; i < nbPasswd; i++)
                {
                    password = "";
                    password = generate();
                    passwdlist.Add(password);
                }
                for (int i = 0; i < passwdlist.Count; i++)
                {
                    list.Items.Add(passwdlist[i]);
                }
    celle-ci suffit, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                for (int i = 0; i < nbPasswd; i++)
                {
                    password = "";
                    password = generate();
                    list.Items.Add(password);
                }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Votre avis sur ce code - Générateur de mot de passe
    Par austin57 dans le forum Tkinter
    Réponses: 4
    Dernier message: 22/09/2012, 23h34
  2. Générateur de Mot de Passe
    Par forum dans le forum Téléchargements
    Réponses: 0
    Dernier message: 03/06/2011, 16h32
  3. générateur de mot de passe
    Par cyborgtun dans le forum VB.NET
    Réponses: 0
    Dernier message: 19/05/2010, 21h10
  4. générateur de mot de passe
    Par zais_ethael dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 18/05/2006, 15h47
  5. Générateur de mot de passe
    Par christel1982 dans le forum ASP
    Réponses: 2
    Dernier message: 16/11/2005, 12h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo