GENERATEUR DE MOT DE PASSE

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 7 oct. 2005 à 13:58
affoufti Messages postés 5 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 11 août 2011 - 11 août 2011 à 13:24
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34114-generateur-de-mot-de-passe

affoufti Messages postés 5 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 11 août 2011
11 août 2011 à 13:24
@rdurupt: bhen il n'est jamais trop tard ..merci pour ce bout de code
cs_rdurupt Messages postés 1 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 23 juin 2011
23 juin 2011 à 14:30
J’arrive un peut tard 2005 c’est loin.
Ceci dit si quelqu’un s’intéresse à ce code, je vous propose m’a variante.
En fait je m’intéresse qu’à la génération de mot de passe tel qu’il peut être trouvé dans un login Windows (des lettres, des chiffres et des symboles) avec huit caractères minimum.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PassWord
{
class GeneratePass

{
//Retourne un caractère aléatoirement de A à Z
private string letter(Random rd)
{
string lettre = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
return lettre[rd.Next(0, lettre.Length)].ToString();
}
//Retourne aléatoirement un chiffre au format string de 0 à 9
private string nombre(Random rd)
{
return rd.Next(0, 10).ToString();
}
//Retourne aléatoirement un signe /*-+% etc.
private string ponctuation(Random rd)
{
string ponctuation = ",?.;:/!§£$%µ*-+" ;
return ponctuation[rd.Next(0, ponctuation.Length)].ToString();
}
/**
* Toutes les fonctions de la class sont privé sauf celle-ci pour permettre de récupérer la valeur à partir du programme.
* Vue que les mots de passe sont souvent de 8 caractère minimum, j'affecte un rendom de 8 à 12 caractères.
* Pour mitiger les caractères type lettre nombre et ponctuation, je fixe un autre redom de 1 à 3 pour définir aléatoirement la chêne de caractères.
* Je passe le rendom (rd) aux fonction privés pour ne pas à avoir à le réinitialiser.
* */
public string Generer()
{
Random rd = new Random(); //Initialiser le rendom
string pass = "";
for (int i = 0; i < rd.Next(8, 13); i++) //Pour 8 caractères à redom de 12 caractères
{
switch (rd.Next(1, 4)) //Selon Type de caractère?
{
case 1: //Type lettre
pass += letter(rd);
break;
case 2: //Type nombre
pass += nombre(rd);
break;
case 3: //Type ponctuation
pass += ponctuation(rd);
break;
}
}
return pass; //Retourne le mot de passe ainsi généré.
} }
}
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
7 oct. 2005 à 19:09
Oui, c vrai que le coup de traiter les lettres comme des objets, pour utiliser .Sort(), c'est vraiment de la programmtion objet ^^
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 oct. 2005 à 13:58
mouaip... quelques petites remarques concernant ton code (je n'ai regardé que la classe generatePass) :

ca ne sert à rien de déclarer un tableau de string du type :
string[] lettre = { "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z" };
utilise plutot ceci :
string lettre = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
la suite devient :
Random rd = new Random();

for (int i = 0; i < numberLettre; i++)
{

int numberLet;
numberLet = rd.Next(0, lettre.Length);

if (i % 2 == 0)
{
chaineLettre += lettre[numberLet;
}
else
{
chaineLettre += lettre[numberLet].ToLower();
}

}

pareil pour les autres méthodes...

pour ta méthode mélange... j'aurais vu quelque chose de plus "Orienté Objet"...
je m'explique. une string peut être vu comme un char[] et donc peut utiliser une classe de type IComparer pour trier ses éléments en utilisant sa méthode Sort().
ex :

public class Melangeur : IComparer {
private Random rd;
public Melangeur() {
rd = new Random();
}
public int Compare(object x, object y) {
if ((char)x == (char)y)
return 0;

return rd.Next(-1,1)
}
}

du coups pour melanger, ta méthode deviendra :
public string Melanger(string chaine) {
char[] lettres = chaine.ToCharArray();
Array.Sort(lettres, new Melangeur());
chaine = new string(lettres);
return chaine;
}

enfin... en .NET,les conventions de nommage ne sont pas les mêmes qu'en Java... c'est à dire que les classes, les propriétés, les méthodes doivent avoir une majuscule au début.
Rejoignez-nous