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;
}