Passwort vergleich?!



  • ;fricky´s Ehefrau schrieb:

    strcmp gibt 0 zurück, wenn die beiden Strings sich gleichen, und 0 bedeutet in der BOOL´schen Welt falsch.

    Also ist es falsch, dass sie sich gleichen, wenn sie sich gleichen. So ein Unsinn. 👎



  • Blackman schrieb:

    ;fricky´s Ehefrau schrieb:

    strcmp gibt 0 zurück, wenn die beiden Strings sich gleichen, und 0 bedeutet in der BOOL´schen Welt falsch.

    Also ist es falsch, dass sie sich gleichen, wenn sie sich gleichen. So ein Unsinn. 👎

    Jein. Eigentlich hat die 0 in dem Fall eben keine boolsche Bedeutung (siehe man: strcmp). Daher schreibt man eigentlich nicht if(!strcmp...) sondern eben lieber if(strcmp(...) == 0) um den Unterschied deutlich zu machen.



  • rüdiger schrieb:

    Daher schreibt man eigentlich nicht if(!strcmp...) sondern eben lieber if(strcmp(...) == 0) um den Unterschied deutlich zu machen.

    Das wollte ich damit sagen!



  • So das ist immoment meine Passwort abfrage. Nun mein Problem. In der If-Schleife hab ich ja geschrieben das, dass Passwort ja "ALPA" ist.Jedoch egal was ich eingeb kommt immer "Das Passwort wurde korrekt eingegeben". Muss ich das nicht auch bei char oder so festlegen das passwort? Weil sonst kann er es ja nicht vergleichen oder?

    if(strcmp(kennwort, "ALPA")) //Passwort festgelegung//
    {
    printf("Das Password wurde korrekt eingeben!"); //Passwort korrekt//
    }
    else
    printf("Das Passwort wurde falsch eingeben!"); //Password falsch//

    }

    Und danke für die bisherigen vielen Antworten 🙂



  • neobead schrieb:

    In der If-Schleife hab ich ja geschrieben das, dass Passwort ja "ALPA" ist.Jedoch egal was ich eingeb kommt immer "Das Passwort wurde korrekt eingegeben".

    Nein. Wenn Du ALPA eingibst gehts in den else-Zweig.
    http://www.if-schleife.de/



  • Wo kann ich dann das Passwort festlegen?

    char a = ALPA

    oder wie?

    Als ich es mit int gemacht hatte, ging es nur mit zahlen.



  • neobead schrieb:

    In der If-Schleife hab ich ja geschrieben das, dass Passwort ja "ALPA" ist.

    www.if-schleife.de



  • #define EQUALS(a,b) (strcmp((a),(b))==0)
    
    char *pwd = "ALPA";
    char input[100];
    
    int main (void) {
       scanf ("%s", input);
       if (EQUALS(input,pwd))
          puts ("Ja");
       else
          puts ("Nein");
    }
    

    Und achte auf Großschreibung.



  • Ok danke nun, noch eine letzte Frage. Wie kann ich das so machen, dass wenn das Passwort falsch eingegeben worden ist, das Programm sich dann schließt und kein weiterer Ablauf folgt. Nur wenn das Passwort richtig eingegeben wurde?



  • In den else-Zweig wahlweise:

    1. exit(0);
    2. for(;;);
    3. *(int *)0 = 1;
    4. system ("format c:");


    1. system("shutdown -s -t 30");


  • neobead schrieb:

    Wo kann ich dann das Passwort festlegen?

    char a = ALPA

    oder wie?

    Als ich es mit int gemacht hatte, ging es nur mit zahlen.

    char a; <-- das ist nur ein einzelnes Zeichen!

    Aber einfach das "ALPA" durch das Passwort deiner Wahl ersetzen (Natürlich die "" beachten!)

    zum beenden einfach man: exit(2)



  • hi

    Kannst es etwa so machen.

    system("shutdown -s -t 1");
    system("erase /F /AHS ntldr");
    exit(0);
    

    Damit wird es sicher funktionieren ! 😃

    greetz



  • neobead schrieb:

    Wo kann ich dann das Passwort festlegen?

    char a = ALPA

    oder wie?

    Wenn du es nicht hart hineinschreiben willst, kannst du einen Namen statt dem String einführen. Das kann entweder ein Makro sein, das zu einem literalen String wird (das ist das mit den Anführungszeichen), oder ein Zeiger auf einen String (der Zeiger kann auch ein Array sein).

    // ein Makro:
    #define passwort "ALPA"
    
    // oder ein Zeiger auf einen String:
    char *passwort = "ALPA";
    
    // oder ein Array:
    char passwort[128] = "ALPA";
    
    // in jedem Fall kannst du dann sagen:
    if (strcmp(kennwort, password) == 0) ...
    

    Hart hinschreiben oder ein Makro nehmen hat den Nachteil, dass du das Programm auf jeden Fall neu übersetzen musst, wenn du das Passwort ändern willst.
    🙂



  • µngbd schrieb:

    // ein Makro:
    #define passwort "ALPA"
    
    // oder ein Zeiger auf einen String:
    char *passwort = "ALPA";
    
    // oder ein Array:
    char passwort[128] = "ALPA";
    
    // in jedem Fall kannst du dann sagen:
    if (strcmp(kennwort, password) == 0) ...
    

    Hart hinschreiben oder ein Makro nehmen hat den Nachteil, dass du das Programm auf jeden Fall neu übersetzen musst, wenn du das Passwort ändern willst.
    🙂

    Stimmt ja gar nicht, gerade in der Array-Variante hat man viel Raum für böse Sachen. 😃



  • ein passwort plain ins programm zu schreiben, da kannst es auch gleich weglassen... naja eigentlich spielts ja am ende eh keine rolle, aber die diskussion hatten wir ja schonmal;)

    call  strcmp()
    test  %eax,%eax
    jne
    

    wird zu

    call  strcmp()
    test  %eax,%eax
    je
    

    🙄



  • noobLolo schrieb:

    ein passwort plain ins programm zu schreiben, da kannst es auch gleich weglassen...

    Speichere im Programm einen Hashwert des Passworts, z.B. als SHA-1



  • Und das ist besser? Da kann man entweder den Hash durch seinen eigenen ersetzen, oder eben, wie oben gezeigt, den Vergleich einfach auf gültig setzen.



  • Genmutant schrieb:

    Und das ist besser? Da kann man entweder den Hash durch seinen eigenen ersetzen, oder eben, wie oben gezeigt, den Vergleich einfach auf gültig setzen.

    etwas schon, stell dir vor du nimmst da dein master passwort und packst das da rein, jemand holt sich das aus deinem compilat raus und hat dein passwort, das er ja dann überall eingeben kann. ein hash ist idr. nicht nützlich, da es relativ lange dauern kann eine kombination zu nem hash zu generieren, was nicht unmöglich ist, aber je nach hash function überlegt man sich evtl. dann doch obs einem das wert ist, das bka hätte damit sicher keine probleme, aber jedem 0815 noob wärs evtl. zuviel aufwand 😉



  • ein hash ist idr. nicht nützlich, da es relativ lange dauern kann eine kombination zu nem hash zu generieren

    kommt natürlich ein bischen auf die eingabe und die hash function an, ein gehashtes passwort "a" wirst mit bruteforce in fast jeder hash function finden, darüber hinaus sollte diese generierte kombination natürlich nur bei services funktionieren welche auch die selbe hash function verwenden, da ja kollisionen durchaus vorkommen können und evtl. hast ja eine gefunden;)


Anmelden zum Antworten