Ankündigung

Einklappen
Keine Ankündigung bisher.

C# Programmierung: Passwort-Check

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    C# Programmierung: Passwort-Check

    Moin,
    ich arbeite mich gerade in die C# Programmierung ein und bräuchte mal eure Hilfe bitte.

    Ich schreibe eine Konsolenanwendung, wo der Benutzer aufgefordert wird ein 8 stellige PW einzugeben.
    Das Programm soll prüfen, ob mindestens 1 Großbuchstabe, mindestens 1 Kleinbuchstabe, mindestens 1 Sonderzeichen und 2 Ziffern vorkommen.

    Mir ist bewusst was ich prüfen will, weiß aber nicht wie ich das genau anwende in der for-schleife. die Bedingung ist dort für mich noch nicht so nachvollziehbar.

    public void PasswortChecker()
    {

    int PasswortBuchstabe = 0;
    int AnzahlGroßbuchstaben = 0;
    int AnzahlKleinbuchstaben = 0;
    int AnzahlSonderzeichen = 0;
    int AnzahlZiffern = 0;

    Console.WriteLine("Das Passwort muss folgende Kriterien erfüllen: ");
    Console.WriteLine("tmindestens 1 Großbuchstabenntmindestens 1 Kleinbuchstabenntmindestens 2 Ziffernntmindestens 1 Sonderzeichenn");
    Console.WriteLine("Bitte ein 8 stelliges Passwort eingeben: ");

    string passwort = Console.ReadLine();
    string [] groß = { "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", "Ä", "Ö", "Ü"};
    string [] klein = { "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", "ö", "ä", "ü" };
    string [] sonder = { "!", "§", "$", "%", "&", "/", "(", ")", "=", "?", "`", "´", "*", "+", "#", "_", "-", ":", ".", ";", ",", "" };
    int[] ziffern = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };


    //if (passwort.Length == 8 && AnzahlGroßbuchstaben >= 1 && AnzahlKleinbuchstaben >= 1 && AnzahlSonderzeichen >= 1 && AnzahlZiffern >= 1)

    for (int i = 0; i < passwort.Length; i++)
    {
    for (int j = 0; AnzahlGroßbuchstaben > j; j++)
    {


    }

    //for (int k = 0; AnzahlKleinbuchstaben > k; k++)
    //{

    //}
    //for (int l = 0; AnzahlSonderzeichen > l; l++)
    //{

    //}
    //for (int m = 0; AnzahlZiffern > m; m++)
    //{

    //}
    }
    Console.WriteLine("Das eingegebene Passwort {0} erfüllt alle Kriterien", passwort);


    }


    // da man es schlecht sehen kann, die 1. for schleife ist die äußerste schleife, die anderen 4 stehen auf einer ebene in der 1. schleife.

    #2
    kenne mich mit C# nicht aus, aber du schreibst ja alles in ein array, also musst du schauen ob an stelle 1 ein großbuchstabe, kleinbuchstabe, sonderzeichen oder eine ziffer steht. wenn ein großbuchstabe vorhanden ist, erhöhst du AnzahlGroßbuchstaben um 1 usw, und wenn am ende bei jedem wert mindestens eine 1 vorliegt, was ja pflicht ist, gibst du die meldung aus, ansonsten fragst du ob ein neues eingegeben werden möchte

    so würds zumindest ich machen

    Kommentar


      #3
      Werd noch mal editieren :D

      Kommentar


        #4
        jo, das ist soweit klar.
        das problem ist die umsetzung in den code.
        könntest du mir das evtl. als pseudocode hinschreiben, als ansatz.

        also meinst du das in etwa so:

        for (int i = 0; i < passwort.Length; i++)
        {
        for (; ; AnzahlGroßbuchstabe++)
        {
        }
        ....

        wie mach ich denn die Prüfung? Als Substring?


        editieren:

        Danke zaengli für den Hinweis, ich würd das erstmal gern so hinbekommen, damit ich die Grundlagen kapiere (auch wenn das unsauberer code ist).
        Also auch kein regexp o.ä. Gerne meine Weise, bitte :)

        Kommentar


          #5
          Hab keine ahnung von c, aber könnte man das nicht wie in Java über ne Regular expression machen?

          Kommentar


            #6
            Dein Passwort ist im string pw gespeichert. Dann durchlaufen und jede Stelle abfragen.

            for (int i = 0; i < pw.Length; i++)
            {
            ___if (char.IsDigit(pw[i]))
            ___{
            ______// Char ist eine Zahl
            ______// Irgendwas machen...
            ___}
            ___else if (char.IsLower(pw[i]))
            ___{
            ______// Char ist Kleinbuchstabe
            ______// Irgendwas machen...
            ___}
            ___// usw...
            }

            Die else-if Answeisungen einfach noch weiter schreiben für die restlichen Fälle.

            Edit: Jetzt erst dein Edit gesehen ;)

            Kommentar


              #7
              Ich glaube du kannst das ganze sogar viel kürzer umsetzen mit Regular Expressions. Bin allerdings jetzt zu faul um das zu machen, müsstest halt googeln :X

              Kommentar


                #8
                Mach es dir doch net so schwer ;D

                Ist zwar ein VB.Net Code, aber das Prinzip sollte klar werden:

                [spoiler]If TextBox1.Text.Length = 8 Then
                Dim bZahl As Boolean = False
                Dim bGrossbuchstabe As Boolean = False
                Dim bKleinbuchstabe As Boolean = False
                Dim bZeichen As Boolean = False

                Dim sZeichen As String = "!§$%&/()=?`´*+#_-:.;,"
                For i = 0 To TextBox1.Text.Length - 1
                If bZahl = False Then
                If IsNumeric(TextBox1.Text.Substring(i, 1)) = True Then bZahl = True
                End If

                If bGrossbuchstabe = False Then
                If Asc(TextBox1.Text.Substring(i, 1)) >= 65 And Asc(TextBox1.Text.Substring(i, 1)) = 97 And Asc(TextBox1.Text.Substring(i, 1))

                Kommentar


                  #9
                  string passwort = "TTest";
                  string[] groß = { "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", "Ä", "Ö", "Ü" };

                  var res = groß.Aggregate(0, (a, b) => a + passwort.Count(x => x.ToString() == b));
                  hf

                  oder eZ:

                  string passwort = "TTest";

                  var blubb = passwort.Count(x => x >= 65 && x char.IsUpper(x));
                  usw... guck dir mal Linq an

                  Kommentar


                    #10
                    Regex wärs ungefähr so:

                    ((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]{2}).{8})

                    Kommentar


                      #11
                      Mit 5 RegEx-Ausdrücken wäre es so:

                      Dim myMatch1 As Match = Regex.Match(TextBox1.Text, ""[0-9].*[0-9]")")
                      Dim myMatch2 As Match = Regex.Match(TextBox1.Text, "[a-z]")
                      Dim myMatch3 As Match = Regex.Match(TextBox1.Text, "[A-Z]")
                      Dim myMatch4 As Match = Regex.Match(TextBox1.Text, "[!§$%&/()=?`´*+#_-:.;,]")
                      Dim myMatch5 As Match = Regex.Match(TextBox1.Text, "^.{8}$")
                      Edit: Ups, sollen ja zwei Ziffern dabei sein. Berichtigt.

                      Kommentar


                        #12
                        Moin,
                        danke erstmal für die ganzen Vorschläge. Das mit der ASCII-Range klingt schonmal echt gut, das werde ich danach mal einbauen.

                        Ich würde aber gern meine Idee versuchen umzusetzen mit den verschiedenen Schleifen.

                        im moment sieht das so aus:

                        for (int i = 0; i < passwort.length; i ++)
                        {
                        for ( ...; AnzahlGroßbuchstaben >= 1; AnzahlGroßbuchstaben++)
                        {
                        }
                        }

                        Problem ist die Initialisierung in der 2. for schleife. Ich möchte dort ja überprüfen, ob der erste Buchstabe des string passwort ein Großbuchstabe ist und wenn ja, soll er hochzählen. Die Frage ist nur, wie initialisiere ich das.

                        Danke

                        Kommentar


                          #13
                          was möchtest du initialisieren? hast du schonmal mit indexern gearbeitet?

                          Kommentar


                            #14
                            Nein hab ich noch nicht. Hab eher an SUbstrings gedacht. Aber wie gesagt, da häng ich gerade fest. Bin für jede Hilfe dankbar

                            Kommentar


                              #15
                              Warum hälst du so sehr an deinem Ansatz fest? Er ist einfach nicht gut.

                              Kommentar

                              Lädt...
                              X