C# :: Aufgabe #77 :: Lösung #7

14 Lösungen Lösungen öffentlich
#77

Passwortgenerator mit Parametern

Anfänger - C# von pocki - 27.11.2014 um 18:11 Uhr
Erstelle ein Programm/Funktion welche/s ein zufälliges Passwort erzeugt.
Als Parameter soll die Länge sowie die Art der darin vorkommenden Zeichen übergeben werden können.
Zur Auswahl sollen stehen: Kleinbuchstaben, Großbuchstaben, Zahlen und Sonderzeichen.
Jede beliebige Kombination der Parameter soll möglich sein.
#7
vote_ok
von niknik (1230 Punkte) - 14.08.2015 um 10:15 Uhr
Todesumständlich, aber funktioniert prima.
Leider nur 'ne Konsolenanwendung, aber es wurden daran ja keine Anforderungen gestellt

Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PasswortGenerator
{
    class Program
    {
        /* 
         * ASCII CODE: 
         * 33-126, falls alles erlaubt
         * 48-57 Zahlen
         * 97-122 Kleinbuchstaben
         * 65-90 Großbuchstaben
         * Rest Sonderzeichen
        */
        public static string Generiere(int l, bool s, bool g, bool k, bool z)
        {
            Random rnd = new Random();
            string ausgabe = "";

            bool case1  = (!s && !g && !k && !z); // 0000
            bool case2  = (!s && !g && !k &&  z); // 0001
            bool case3  = (!s && !g &&  k && !z); // 0010
            bool case4  = (!s && !g &&  k &&  z); // 0011
            bool case5  = (!s &&  g && !k && !z); // 0100
            bool case6  = (!s &&  g && !k &&  z); // 0101
            bool case7  = (!s &&  g &&  k && !z); // 0110
            bool case8  = (!s &&  g &&  k &&  z); // 0111
            bool case9  = ( s && !g && !k && !z); // 1000
            bool case10 = ( s && !g && !k &&  z); // 1001
            bool case11 = ( s && !g &&  k && !z); // 1010
            bool case12 = ( s && !g &&  k &&  z); // 1011
            bool case13 = ( s &&  g && !k && !z); // 1100
            bool case14 = ( s &&  g && !k &&  z); // 1101
            bool case15 = ( s &&  g &&  k && !z); // 1110
            bool case16 = ( s &&  g &&  k &&  z); // 1111

            // nichts erlaubt
            if (case1)
            {
                return "";
            }
            // nur Zahlen
            else if (case2)
            {
                for (int i = 0; i < l; i++)
                {
                    char character = (char)rnd.Next(48, 58);
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // nur Kleinbuchstaben
            else if (case3)
            {
                for (int i = 0; i < l; i++)
                {
                    char character = (char)rnd.Next(97, 123);
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Kleinbuchstaben & Zahlen
            else if (case4)
            {
                int asciizahl; 
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 58; // wegen while-schleife
                    while ((asciizahl > 57 && asciizahl < 97))
                    {
                        asciizahl = rnd.Next(48, 123);
                    }
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // nur Großbuchstaben
            else if (case5)
            {
                for (int i = 0; i < l; i++)
                {
                    char character = (char)rnd.Next(65, 91);
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Großbuchstaben & Zahlen
            else if (case6)
            {
                int asciizahl;
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 58; // wegen while-schleife
                    while ((asciizahl > 57 && asciizahl < 65))
                    {
                        asciizahl = rnd.Next(48, 91);
                    }
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Großbuchstaben & Kleinbuchstaben
            else if (case7)
            {
                int asciizahl;
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 91; // wegen while-schleife
                    while ((asciizahl > 90 && asciizahl < 97))
                    {
                        asciizahl = rnd.Next(65, 123);
                    }
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Großbuchstaben, Kleinbuchstaben & Zahlen
            else if (case8)
            {
                int asciizahl;
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 58; // wegen while-schleife
                    while ((asciizahl > 57 && asciizahl < 65) || (asciizahl > 90 && asciizahl < 97))
                    {
                        asciizahl = rnd.Next(48, 123);
                    }
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // nur Sonderzeichen
            else if (case9)
            {
                int asciizahl;
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 57; // wegen while-schleife
                    while ((asciizahl > 47 && asciizahl < 58) || (asciizahl > 64 && asciizahl < 91) || (asciizahl > 96 && asciizahl < 123))
                    {
                        asciizahl = rnd.Next(33, 127);
                    }
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Sonderzeichen & Zahlen
            else if (case10)
            {
                int asciizahl;
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 90; // wegen while-schleife
                    while ((asciizahl > 64 && asciizahl < 91) || (asciizahl > 96 && asciizahl < 123))
                    {
                        asciizahl = rnd.Next(33, 127);
                    }
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Sonderzeichen & Kleinbuchstaben
            else if (case11)
            {
                int asciizahl;
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 57; // wegen while-schleife
                    while ((asciizahl > 47 && asciizahl < 58) || (asciizahl > 64 && asciizahl < 91))
                    {
                        asciizahl = rnd.Next(33, 127);
                    }
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Sonderzeichen, Kleinbuchstaben & Zahlen
            else if (case12)
            {
                int asciizahl;
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 65; // wegen while-schleife
                    while ((asciizahl > 64 && asciizahl < 91))
                    {
                        asciizahl = rnd.Next(33, 127);
                    }                    
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Sonderzeichen & Großbuchstaben
            else if (case13)
            {
                int asciizahl;
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 57; // wegen while-schleife
                    while ((asciizahl > 47 && asciizahl < 58) || (asciizahl > 96 && asciizahl < 123))
                    {
                        asciizahl = rnd.Next(33, 127);
                    }
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Sonderzeichen, Großbuchstaben & Zahlen
            else if (case14)
            {
                int asciizahl;
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 97; // wegen while-schleife
                    while ((asciizahl > 96 && asciizahl < 123))
                    {
                        asciizahl = rnd.Next(33, 127);
                    }
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Sonderzeichen, Großbuchstaben & Kleinbuchstaben
            else if (case15)
            {
                int asciizahl;
                for (int i = 0; i < l; i++)
                {
                    asciizahl = 57; // wegen while-schleife
                    while ((asciizahl > 47 && asciizahl < 58))
                    {
                        asciizahl = rnd.Next(33, 127);
                    }
                    char character = (char)asciizahl;
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            // Alles erlaubt
            else if (case16)
            {
                for (int i = 0; i < l; i++)
                {
                    char character = (char)rnd.Next(33, 127);
                    ausgabe += character.ToString();
                }
                return ausgabe;
            }
            else
            {
                throw new Exception("Something went horribly wrong");
            }
        }

        static void Main(string[] args)
        {
            int laenge;
            bool sonder = false, gross = false, klein = false, zahlen = false;
            char antwort;

            // Länge setzen
            do
            {
                Console.WriteLine("Wie lang soll das Passwort werden?");
            } while (!int.TryParse(Console.ReadLine(), out laenge));


            // Parameter setzen ANFANG
            Console.WriteLine("Sind Sonderzeichen erlaubt? (Y/N)");
            antwort = Console.ReadLine().ToUpper()[0];
            if (antwort == 'Y')
            {
                sonder = true;
            }
            Console.WriteLine("Sind Großbuchstaben erlaubt? (Y/N)");
            antwort = Console.ReadLine().ToUpper()[0];
            if (antwort == 'Y')
            {
                gross = true;
            }
            Console.WriteLine("Sind Kleinbuchstaben erlaubt? (Y/N)");
            antwort = Console.ReadLine().ToUpper()[0];
            if (antwort == 'Y')
            {
                klein = true;
            }
            Console.WriteLine("Sind Zahlen erlaubt? (Y/N)");
            antwort = Console.ReadLine().ToUpper()[0];
            if (antwort == 'Y')
            {
                zahlen = true;
            }
            // Parameter setzen ENDE


            // Passwort generieren und ausgeben
            Console.Clear();
            Console.WriteLine("Dein Passwort: \n{0}", Generiere(laenge, sonder, gross, klein, zahlen));
            Console.ReadLine();
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben