Passwort auf Sicherheitsanforderungen überprüfen in C?
Hallo zusammen,
ich muss in C ein programm schreiben welches ein Passwort auf die Sicherheit überprüft. Folgende Vorraussetzungen sind gegeben:
- Zwischen 8 und 20 Zeichen lang
- mind. Ein Großbuchstabe
- mind. eine ziffer 0-9
- mind. ein ! oder _ oder #
- keine Leerzeichen
Die Funktion soll dabei ein String erhalten und ein Char zurückgeben. 1 steht für sicheres passwort 0 für unsicher,
Hat vielleicht jemand Tipps?
VG
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.
Hab auch erst jetzt realisiert, dass C gefragt war und nicht C#.
Ich würde mir ziemlich die Finger dabei abbrechen, die o.g. Anforderungen als Regex zu formulieren. Und ich programmiere ein paar Jahre.
Du kannst ja noch ein wenig mit regulären Ausdrücken üben. Irgendwann wirst du darin sicherer.
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.
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;
}
#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. :)
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^^
Vorausgesetzt, der Fragesteller kommt darf irgendwie eine Regex-Library benutzen, im ANSI-C-Standard ist Regex anscheinend nicht drin.