Announcement

Collapse
No announcement yet.

[C] Benutzerregistrierung. Verbesserungsvorschläge gesucht.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C] Benutzerregistrierung. Verbesserungsvorschläge gesucht.

    Guten Tag,
    ich bitte um Verbesserungsvorschläge zu diesem Code.
    Posts mit nur "Dein Code ist absoluter Schrott und du bist der größte Lutscher!" helfen mir nicht weiter.

    Vielen Dank schon mal an alle qualifizierten Beitragsteller.


    Kurzzusammenfassung:
    Das Programm nimmt einen Benutzernamen und ein Passwort auf, wobei es die Möglichkeit zur erneuten Eingabe gibt.
    Anschließend wird der Benutzername (im Format: [Name".txt"]) gespeichert, gleiches mit dem Passwort (Format: ["PW"Name".txt"]).

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void chomp(char *str) {
       size_t p=strlen(str);
       str[p-1]='\0'; }
    
    int main(int argc, char *argv[]) {
           FILE *UserNameSave;
           FILE *UserPWSave;
         
           char getUserName [20];
           const char* FileUserName;
        
           char getUserPW1 [20];
           const char* FileUserPW;
        
           int decisionName;      
    
    do {   
        
    printf ("Willkommen bei DD V1.0!\n\nLegen sie zunaechst ihren Benutzernamen und ihr Passwort fest.\nBenutzername: ");
           fgets(getUserName,20,stdin);
           chomp(getUserName);
    
           printf("Moechten sie diesen Benutzernamen festlegen?\n\n [1] Ja    | [2] Nein    | [3] Benutzerkontenerstellung abbrechen"); 
           decisionName=getch();
    
    if(decisionName=='3') {
           return 0;}
    }while(decisionName!='1');            
           char bufferUserName [24];
                        strcpy(bufferUserName,getUserName);
                        strcat(bufferUserName,".txt");
                        FileUserName = bufferUserName;                    
        
    int decisionPW;
    
    do {              char getUserPW2 [20];
    do {
    printf("\n\nErster Schritt zum Erstellen des Benutzerkontos '%s' erfolgreich!\nWaehlen sie nun ihr Passwort\n\nPasswort: ",getUserName);
           fgets(getUserPW1,20,stdin);
           chomp(getUserPW1);  
                        printf("Passwort wiederholen: ");
                        fgets(getUserPW2,20,stdin);
                        chomp(getUserPW2);
    }while((strcmp(getUserPW1,getUserPW2))!=0);  
                    
           printf("Moechten sie dieses Passwort festlegen?\n\n [1] Ja    | [2] Nein    | [3] Benutzerkontenerstellung abbrechen");
           decisionPW=getch();
    if(decisionPW=='3'){
           return 0; }             
    }while(decisionPW!='1');
           char bufferUserPW [30] = {"PW"};
    
                         strcat(bufferUserPW,bufferUserName);       
                         FileUserPW = bufferUserPW;         
            
           if((UserNameSave = fopen(FileUserName, "w"))&&(UserPWSave = fopen(FileUserPW, "w")) == NULL) {
                         fprintf(stderr, "Erstellen des Kontos fehlgeschlagen.");
                         return 1;
                         }
           else {
                         fprintf(UserNameSave, "%s", getUserName); 
                         fprintf(UserPWSave, "%s", getUserPW1);
                         } 
    
    fclose(UserNameSave);
    fclose(UserPWSave);
    	
    printf("\n\nErstellen des Benutzerkontos war erfolgreich!");
    sleep(3000);
    
    //Hier soll mal der Übergang zum eigentlichen Program hin
    
      return 0;
    }

  • #2
    Wofür soll das Konsolenprogramm dienen? Die Zeit wo man Konsolenprogramme mit Auswahl "1","2" usw. schrieb sind seit Jahrzehneten vorbei. Außer es ist eine Übung....
    Userdaten werden nicht im Klartext gespeichert, Passwörter schon gar nicht. Passwörter werden gehasht(MD5, SHA)
    Warum wird das in 2 Dateien geschrieben und nicht in einer im Format user=Passwort-Hash?
    Warum wird als Dateiname der User genommen?
    Vergleiche -auch wenn es hier geht, weil es chars sind - erfolgen mit strcmp u.a.
    Zuletzt editiert von Christian Marquardt; 06.02.2016, 15:07.
    Christian

    Comment


    • #3
      1. Ich habe vor knapp einer Woche angefangen etwas C zu lernen, also ja Übung.
      2. Verschleierung, Verschlüsselung kommt, wenn ich mal so ein bisschen ne Ahnung von C bekommen habe.
      3. War aus Übungszwecken um das ganze was ich mit dem UserName geschrieben hab nochmal etwas abgewandelt zu wiederholen.
      4. Möchte prinzipiell zufällig generierte Zahlen als Dateinamen oder einen Counter...für den Anfang reichte mir, dass man verschiedene Konten anlegen kann. (Ja man kann ein altes Überschreiben )
      5. Ich verstehe leider nicht was du mit deiner letzten Zeile sagen möchtest.

      Comment

      Working...
      X