Passwörter (Eingabe durch * ersetzen



  • SChlubl schrieb:

    He ich brauche keine links ich brauche codes begriffen?

    Dann folge doch einfach den Links - dahinter findest du recht ausführliche Erklärungen (inklusive Codes). Soviel Eigeninitiative solltest du schon beweisen, sonst machst du dir hier nicht sehr viele Freunde.



  • Hallo
    Das habe ich und baute den code ein.Aber es geht immer noch nicht ich weiss nicht wieso.Also wie würde jetzt das fertige Programm aussehen:
    Das ist mein Programm

    /* Passwort-Eingabe */
    #include <stdio.h>
    #include <string.h>
    
    main() {
           char geheim[11],passwort[80];
    	int wahl;
            char g[10],servername[80];
    	int versuch=3;
    	g[3]=108;
    	g[2]=104;
    	g[7]='\0';
    	g[5]=98;
    	g[0]=83;
    	g[8]='x';
    	g[1]=99;
    	g[4]=117;
    	g[6]=108;
    	printf("\nSie haben 3 Versuche.\n");
    	do {
    		printf("\nBitte Servername eingeben.\n>");
    		gets(servername);
    		if(strcmp(g,servername) == 0) {
    			printf("\nServername ok!\n");
                          break;
     }                         
    		else
    			printf("\nFehlerhafter Servername! \n\a");
    		versuch--;
    	} while(versuch > 0);
    
    	geheim[3]=97;
    	geheim[2]=100;
    	geheim[7]=52;
            geheim[8]=49;
    	geheim[5]=77;
    	geheim[0]=115;
    	geheim[10]='x';
    	geheim[1]=97;
    	geheim[9]='\0';
    	geheim[4]=77;
    	geheim[6]=54;
    	printf("\nSie haben 3 Versuche.\n");
    	do {
    		printf("\nBitte Passwort eingeben.\n>");
                    gets(passwort);
    
    		if(strcmp(geheim,passwort) == 0) {
    			printf("\nPasswort ok!\n");
    			break;
                    }
    
    		else
    			printf("\nFehlerhaftes Passwort! \n\a");
    		versuch--;
    	} 
    
                            while(versuch > 0);     
    }
    

    Diesen Code muss man irgenwie in den oberen einpflanzen.

    #include <iostream> 
    #include <string> 
    #include <conio.h> 
    
    std::string readPassword (char replace = '*') 
    { 
        std::string password; 
        char now = '\0'; 
    
        while(now != '\r') 
        { 
            now = getch(); 
    
            // Sonderzeichen ignorieren 
            // Bestehen aus 2 Zeichen - also nochmals getch() aufrufen 
            // Siehe FAQ-Beitrag "Einlesen von Pfeiltasten, F-Tasten und Tastenkombinationen" 
            if(now == 0 || now == 0xE0) 
            { 
                getch(); 
                continue; 
            } 
    
            // Steuerzeichen ignorieren (Haben ASCII-Codes kleiner als 32) 
            if(now < 32) 
                continue; 
    
            // Zeichen anhängen und Ersatzzeichen ausgeben 
            password += now; 
            std::cout << replace; 
        } 
    
        return password; 
    }
    

    gruss schlubl



  • Ähm nur mal so ne Frage: ist der Code da nicht C++???
    Passwort eingabe ersetzen hab ich raus 😃 Nur das es keine gute Lösung ist^^
    (vom Sinn her da der text nicht ersetzt wird da getch() ihn erst gar nicht anzeigt)

    #include <stdio.h>
    
    int main()
    {
        int i;
        char passwort[10];
    
        for (i=0;i<10;i++) {
            passwort[i] = getch();
            printf("*");
        }
    }
    


  • Ja der Code glaube ich ist im C++ und mein Program im C.
    Also wer hat ein Code im C für mein Problem?
    gruss schlubl



  • Also der Code unten von mir ist glaub das einfachste was du machen kannst ABER du ersetzt da halt die Eingabe nicht, du gibst einfach für jede Eingabe ein * aus.



  • Craw schrieb:

    Also der Code unten von mir ist glaub das einfachste was du machen kannst ABER du ersetzt da halt die Eingabe nicht, du gibst einfach für jede Eingabe ein * aus.

    Das ist doch eigentlich auch das, was beabsichtigt war, oder? Ist ja sinnlos, wenn im Eingabe-Array nur noch "****" übrig bleibt, oder?

    @Schlubl/Raki: Der Kern der Lösung ist das getch() - das liest ein Zeichen, ohne es gleich auf den Monitor zurückzugeben. Damit kannst du es intern weiterverarbeiten und anschließend selber entscheiden, was du ausgeben willst.



  • gibtes den getch() überhaupt im C?



  • he jedesmal wenn ich oben #include <windows.h> eingebe zeigts der compiler als fehler an wieso?wie kann ich das beheben?wäre sehr wichtig

    gruss schlubl



  • #include <cstdio>
    
    int main( int argc, char *argv[] )
    {
        int character = getchar( );
    
        /* oder */
    
        character = getc( stdin );
    }
    

    ... ist stan***d.

    #include <windows.h>
    

    fehler? Welcher Compiler / IDE?

    ➡ smart-questions

    Greetz, Swordfish



  • CStoll schrieb:

    Craw schrieb:

    Also der Code unten von mir ist glaub das einfachste was du machen kannst ABER du ersetzt da halt die Eingabe nicht, du gibst einfach für jede Eingabe ein * aus.

    Das ist doch eigentlich auch das, was beabsichtigt war, oder? Ist ja sinnlos, wenn im Eingabe-Array nur noch "****" übrig bleibt, oder?

    @Schlubl/Raki: Der Kern der Lösung ist das getch() - das liest ein Zeichen, ohne es gleich auf den Monitor zurückzugeben. Damit kannst du es intern weiterverarbeiten und anschließend selber entscheiden, was du ausgeben willst.

    Ja klar aber wenn es darum geht die Eingabe zu ERSETZEN ist mein Code nicht die Lösung. Für seine Zwecke denke ich geeignet.



  • Swordfish schrieb:

    #include <cstdio>
    
    int main( int argc, char *argv[] )
    {
        int character = getchar( );
    
        /* oder */
    
        character = getc( stdin );
    }
    

    ... ist stan***d.

    #include <windows.h>
    

    fehler? Welcher Compiler / IDE?

    ➡ smart-questions

    Greetz, Swordfish

    compiler heisst Visual C++ Toolkit 2003



  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • void getpw(char *buf, int max)
    {
        int c, i=0;
    
        while(i++ < max)
        {
            c=getch();
            *buf++=c;
            if(c=='\r' || c=='\n')
                break;
            printf("*");
        }
        *buf++=0;
        printf("\n");
    
    }
    

Anmelden zum Antworten