Autor Beitrag
FrederikR
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 29.06.11 09:44 
Hallo,

ich hatte folgenden Code in PowerShell, um dies Problem zu lösen.

Wie kann ich dies am elegantesten in C# umsetzen?

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function RandomPass ([int]$PasswordLength) {
  if ($PasswordLength -eq 0) {$PasswordLength = 16}
  $RandomPass = $null
  for ($a=1; $a -le $PasswordLength; $a++) {
    switch ($a) {
      8 {$b = [string][char](Get-Random -Minimum 33 -Maximum 48)} #Sonderzeichen
      4 {$b = [string][char](Get-Random -Minimum 48 -Maximum 58)} #Zahlen
      2 {$b = [string][char](Get-Random -Minimum 65 -Maximum 91)} #Großbuchstaben
      6 {$b = [string][char](Get-Random -Minimum 97 -Maximum 123)} #Kleinbuchstaben
      default {$b = [string][char](Get-Random -Minimum 33 -Maximum 127)} #alle
    }
    $RandomPass += $b
  }
  return $RandomPass
}


Zuletzt bearbeitet von FrederikR am Mi 29.06.11 10:55, insgesamt 1-mal bearbeitet
FrederikR Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 29.06.11 10:52 
Also ich hab es jetzt folgendermaßen gelöst. Was ich nicht rausgefunden habe, wie ich einfach ein ASCII-Zeichen eines bestimmten Bereichs per Random zurückgeben kann, wie es bei PowerShell möglich ist.

ausblenden volle Höhe Quelltext
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:
    static string RandomPass(int length)
    {
        string password = String.Empty;

        string special = "!\"#$%&'()*+,-./";
        string number = "0123456789";
        string upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        string lowerCase = "abcdefghijklmnopqrstuvwxyz";

        char[] specials = special.ToCharArray();
        char[] numbers = number.ToCharArray();
        char[] upperCases = upperCase.ToCharArray();
        char[] lowerCases = lowerCase.ToCharArray();
        char[] all = (special + number + upperCase + lowerCase).ToCharArray();

        Random rnd = new Random();
        for (int i = 1; i < length; i++)
        {
            switch (i)
            {
                case 6:
                    password += specials[rnd.Next(0, specials.Length - 1)].ToString();
                    break;
                case 3:
                    password += numbers[rnd.Next(0, numbers.Length - 1)].ToString();
                    break;
                case 5:
                    password += upperCases[rnd.Next(0, upperCases.Length - 1)].ToString();
                    break;
                case 9:
                    password += lowerCases[rnd.Next(0, lowerCases.Length - 1)].ToString();
                    break;
                default:
                    password += all[rnd.Next(0, all.Length - 1)].ToString();
                    break;
            }
        }
        return password;
    }
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Mi 29.06.11 11:54 
Das geht so:

ausblenden C#-Quelltext
1:
2:
char b = (char)57;
string s = b.ToString(); // liefert "9";
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 29.06.11 13:19 
Hallo FrederikR,

du brauchst auch nicht aus den Strings Char-Arrays zu erstellen, du kannst direkt mit den Strings arbeiten:
ausblenden C#-Quelltext
1:
2:
string number = "0123456789";
password += number[rnd.Next(0, number.Length)];

(Und Random.Next() erwartet als 2. Parameter die exklusive obere Grenze!)
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Mi 29.06.11 13:46 
oder eben direkt mit den Chars

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
            string password = "";
            Random rnd = new Random();

            while(password.Length < length)
                switch (rnd.Next(0,3))
                {
                    case 0:
                        password += (char)rnd.Next(48,58);
                        break;
                    case 1:
                        password += (char)rnd.Next(3347);
                        break;
                    case 2:
                        password += (char)rnd.Next(97123);
                        break;
                    case 3:
                        password += (char)rnd.Next(6591);
                        break;
                }
FrederikR Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 29.06.11 15:03 
Danke! Das hatte ich gesucht!