C :: Aufgabe #63 :: Lösung #2

2 Lösungen Lösungen öffentlich
#63

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.
#2
vote_ok
von kathleenw (3600 Punkte) - 15.07.2020 um 11:34 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>

int zufallszahl(int min, int max)
{
    int zahl;
    zahl= (rand()%((max+1)-min))+min;
    return zahl;
}

int main(void)
{
    //Deklarationen
    int laengePasswort, zufall, i;
    bool kleineBuchstaben, grosseBuchstaben, zahlen, sonderzeichen;
    char antwort[2];
    
    //Initialsierungen
    i=0;
    srand(time(NULL));
    
    printf("***************************************\n");
    printf("********** Passwortgenerator **********\n");
    printf("***************************************\n\n");
    printf("Wie lang soll das Passwort sein? ");
    if (scanf("%d", &laengePasswort)!=1) {
        printf("Sie müssen eine Zahl eingeben!");
        return EXIT_FAILURE;
    }
    
    char passwort[laengePasswort];

    printf("Soll das Passwort kleine Buchstaben enthalten? (j/n)");
    fgets(antwort,2,stdin);
    if (fgets(antwort,2,stdin)==NULL) {
        printf("Fehler bei der Eingabe!\n");
        return EXIT_FAILURE;
    }
    else {
        if (antwort[0] == 'j') {
            kleineBuchstaben = true;
        }
        else if (antwort[0] == 'n') {
            kleineBuchstaben = false;
        }
        else {
            printf("Sie dürfen nur ja(j) oder nein(n) eingeben!\n");
            return EXIT_FAILURE;
        }
    }
    printf("Soll das Passwort große Buchstaben enthalten? (j/n)");
    fgets(antwort,2,stdin);
    if (fgets(antwort,2,stdin)==NULL) {
        printf("Fehler bei der Eingabe!\n");
        return EXIT_FAILURE;
    }
    else {
        if (antwort[0] == 'j') {
            grosseBuchstaben = true;
        }
        else if (antwort[0] == 'n') {
            grosseBuchstaben = false;
        }
        else {
            printf("Sie dürfen nur ja(j) oder nein(n) eingeben!\n");
            return EXIT_FAILURE;
        }
    }
    printf("Soll das Passwort Zahlen enthalten? (j/n)");
    fgets(antwort,2,stdin);
    if (fgets(antwort,2,stdin)==NULL) {
        printf("Fehler bei der Eingabe!\n");
        return EXIT_FAILURE;
    }
    else {
        if (antwort[0] == 'j') {
            zahlen = true;
        }
        else if (antwort[0] == 'n') {
            zahlen = false;
        }
        else {
            printf("Sie dürfen nur ja(j) oder nein(n) eingeben!\n");
            return EXIT_FAILURE;
        }
    }
    printf("Soll das Passwort Sonderzeichen enthalten? (j/n)");
    fgets(antwort,2,stdin);
    if (fgets(antwort,2,stdin)==NULL) {
        printf("Fehler bei der Eingabe!\n");
        return EXIT_FAILURE;
    }
    else {
        if (antwort[0] == 'j') {
            sonderzeichen = true;
        }
        else if (antwort[0] == 'n') {
            sonderzeichen = false;
        }
        else {
            printf("Sie dürfen nur ja(j) oder nein(n) eingeben!\n");
            return EXIT_FAILURE;
        }
    }
    
    //Passwort erzeugen
    if (kleineBuchstaben==false && grosseBuchstaben==false && zahlen == false && sonderzeichen ==false) {
        printf("Sie müssen zumindest eine Art von Zeichen für das Passwort zulassen.\n");
    }
    else {
        do {
            zufall = zufallszahl(33, 126);
            if (kleineBuchstaben == true && zufall>=97 && zufall<=122) {
                passwort[i] = (char)zufall;
                i++;
            }
            else if (grosseBuchstaben == true && zufall>=65 && zufall<=90) {
                passwort[i] = (char)zufall;
                i++;
            }
            else if (zahlen == true && zufall>=48 && zufall<=57) {
                passwort[i] = (char)zufall;
                i++;
            }
            else if ((sonderzeichen == true) && ((zufall>=33 && zufall<=47) || (zufall>=58 && zufall<=64) || (zufall>=91 && zufall<=96) || (zufall>=123 && zufall<=126))) {
                passwort[i] = (char)zufall;
                i++;
            }
                
        }while(i<laengePasswort);
        
        //Ausgabe
        
        printf("\nDies ist ihr Passwort: ");
        for(i=0;i<laengePasswort;i++) {
            printf("%c",passwort[i]);
        }
        printf("\n\n");
    }
    return EXIT_SUCCESS;
}

Kommentare:

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

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