[C#] Passwort Generator Hilfe

12/27/2012 18:20 Monsieur Crêpes#1
Hallo ich programmiere gerade an einem Passwort generator der mir alle möglichen Passwörter in eine txt Datei schreibt. Jedoch kommt es vor das sich ein Passwort wiederholt und ein anderes gar nicht vorkommt.

Code:
private static readonly Random CommonRandom = new Random();

        public static string generatePassword(int passwordLength, string characters, bool canRepeatCharacters = false)
        {
            char[] chars = characters.ToCharArray();

            string randomPassword = string.Empty;

            for (int l = 0; l < passwordLength; l++)
            {
                int x = CommonRandom.Next(1, chars.Length);

                if (canRepeatCharacters || !randomPassword.ToCharArray().Any(ch => ch == chars[x]))
                    randomPassword += chars[x].ToString();
                else
                    l--;
            }
            

            return randomPassword;
        }
Da ist der Code den ich dann in eine For- Schleife hineingebe die dann 26^5 mal läuft wenn ich nur mit kleinbuchstaben Passwörter mit der Länge 5 generieren möchte.
12/27/2012 22:21 nkkk#2
warum ds passiert verstehst du aber schon oder?, wenn du 6 man einen würfel würfelst kommt ja auch nicht genau jede zahl ein mal. Wenn du die alle möglcihen passwörter ausgeben willst ist Random schonmal komplett falsch.

und wenn du canRepeatCharacters false hast gibrt es auchnicht 26^5 möglichkeiten sondern 26! / 21! möglichkeiten.

Naja diese methode funktionirt für den fall canRepeatCharacters = false, die variable i muss eben alle werte für 0 ... 26! / 21! durchlaufen
Code:
        public static string GeneratePassword(string chars, int len, int i) 
        {
            var charlist = chars.ToList();
            var charcount = chars.Length;
            string retv = "";
            for (var charnum = charcount; charnum > charcount - len; charnum--) 
            {
                var j = i % charnum;
                i /= charnum;
                retv += charlist[j];
                charlist.RemoveAt(j);
            }
            return retv;
        }
12/29/2012 21:50 Monsieur Crêpes#3
Alles erledigt

#closed