Passwort auf Sicherheitsanforderungen überprüfen in C?

6 Antworten

Da es wohl eine Übung ist:

Iteriere über den String, dabei bestimmst Du Länge und zählst für die entsprechenden Klassen mit (oder nutzt Flags).

Am Ende prüfst Du, ob alle Voraussetzungen erfüllt sind und das wars.

Schau dir mal reguläre Ausdrücke an.

Woher ich das weiß:eigene Erfahrung – Ich habe selber lange im PC gearbeitet
bluebird5  10.12.2019, 14:43

Vorausgesetzt, der Fragesteller kommt darf irgendwie eine Regex-Library benutzen, im ANSI-C-Standard ist Regex anscheinend nicht drin.

0
ZaoDaDong  10.12.2019, 14:45
@bluebird5

Hab auch erst jetzt realisiert, dass C gefragt war und nicht C#.

0

Du könntest via PCRE (Beispiel) oder POSIX (Beispiel) einen regulären Ausdruck definieren und das Passwort auf diesen prüfen.

sebastianla  10.12.2019, 14:48

Ich würde mir ziemlich die Finger dabei abbrechen, die o.g. Anforderungen als Regex zu formulieren. Und ich programmiere ein paar Jahre.

0
regex9  10.12.2019, 14:50
@sebastianla

Du kannst ja noch ein wenig mit regulären Ausdrücken üben. Irgendwann wirst du darin sicherer.

0

Wie sieht denn dein Ansatz aus? Ganz auf die Schnelle - die Länge kannst du direkt überprüfen und wenn die nicht passt "0" zurückgeben und dann in einer Schleife die restlichen Bedingungen checken. Wenn du ein Leerzeichen findest, kannst du direkt "0" zurückgeben, den Rest würde ich über boolsche Variablen prüfen.

MrFlyd1234 
Fragesteller
 10.12.2019, 14:57

Also für die länge habe ich das jetzt so:

#include <stdio.h>
#include <string.h>

int main()
{
    char string[] = "Hallo_12#";
    int laenge = strlen(string);

    if(laenge >=8 && laenge <=20)
    {
        printf("1");
    }

    return 0;
}
0
bluebird5  10.12.2019, 15:10
@MrFlyd1234
#include <stdio.h>
#include <string.h>


int main()
{
    char string[] = "Hallo_00#";
    int laenge = strlen(string);
    int hasNumber = 0;
    for (int i = 0; i < strlen(string); i++) {
      char currentChar = string[i];
      if (currentChar >= 48 && currentChar <= 57) {
        hasNumber = 1;
      }
    }

    if (hasNumber > 0) {
        printf("1");
        return 0;
    }

    printf("0");
    return 0;
}

Und so etwa könnte man überprüfen, ob eine Zahl drin ist. Den ASCII-Code solltest du dir dazu auch nochmal anschauen

https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#ASCII-Tabelle

in der Tabelle siehst du, dass ein Wert zwischen 48 und 57 einer Zahl entspricht. Das mache ich auch in dem Code.

Die anderen Bedingungen kannst du so ähnlich umsetzen, das kriegst du hin. :)

1

Ja du bekommst ja ein char array und das kannst du ja für jede Vorraussetzung durchlaufen und schauen ob sie erfüllt ist .. also z.b. ob ein großbuchstabe da ist (char zu int casten) und schauen ob eine zahl raus kommt, die in der ascii tabelle ein Großbuchstabe wäre

Und so sachen eben für jede Vorraussetzung

Und wenn alle Vorraussetzungen erfüllt sind, returnst du natürlich 1^^