Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Passwort mir "Sternchen"

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
06.03.2005, 03:14 Uhr
Negr0-Robert S.-



Hallo,

ich arbeite gerade an einem Programm in dem Username und Passwort erfragt werden, bis her mache ich die eingabe des Passworts einfach ueber cin, das gefaellt mir aber nicht, moechte das man das Passwort nicht lesen kann, also die einzelnen chars durch ein Stern ersetzt werden, hab aber leider nicht die geringste Ahnung wie ich das machen sollte, Freu mich ueber Loesungen, denk anstoese und sonstige Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.03.2005, 09:30 Uhr
RedEagle




C++:
    #include <conio.h>
    #include <windows.h>
    #include <iostream>
     using namespace std;

    int main(int argc, char *argv[])
    {

     const int  max_chars   = 20;
     const char Platzhalter = '*';
     const char Passwort[max_chars] = "7701\0";
           char Eingabe[max_chars];
           char Zeichen;

     for(int Versuche=0; Versuche < 3; Versuche++) //3 Versuche
     {
      system("CLS");     //Bildschirm löschen
       Eingabe[0] = '\0'; //Eingabe auf 0 setzten

       for(int chars=0; chars < max_chars; chars++) //Maximal 20 Zeichen
       {
         Zeichen = getch(); //Zeichen einlesen
         if(Zeichen == VK_RETURN) //Wurde "Return" gedrückt?
         {
           Eingabe[chars] = '\0'; //"Return" wurde gedrückt
           cout << endl;
           if(strcmp(Eingabe,Passwort) == 0) //Stimmt Eingabe und Passwort überein
           {
            cout << "Passwort richtig" << endl;
            Sleep(200); //Das man die Ausgabe noch lesen kann
            return 0;
           }
           else
           {
            cout << "Passwort falsch" << endl;
            Sleep(200); //Das man die Ausgabe noch lesen kann
            break;
           }
         }
         else //Wenn kein "Return" gedrückt wurde, das Zeichen der Eingabe hinzufügen
         {
           Eingabe[chars] = Zeichen;
           cout << Platzhalter; //Platzhalter ausgeben
         }
       }

     }

     return 0;
    }



ist aber kein ANSI-Standart ...
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.03.2005, 09:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


StandArt? Die Kunst des Stehens????

Das heißt Standard! Merkts euch mal endlich

Nun zum Thema,
man kann auch immer ein Zeichen lesen lassen (über Screen-Buffer, gibts unter win und auch unter linux mit ncurses) und dann immer das zeichen das geschrieben wurde sofort mit einem * überschreiben. Also cursorpos.x--; write("*"); (Pseudocode)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.03.2005, 13:08 Uhr
Negr0-Robert S.-




Zitat von FloSoft:
StandArt? Die Kunst des Stehens????

Das heißt Standard! Merkts euch mal endlich

Nun zum Thema,
man kann auch immer ein Zeichen lesen lassen (über Screen-Buffer, gibts unter win und auch unter linux mit ncurses) und dann immer das zeichen das geschrieben wurde sofort mit einem * überschreiben. Also cursorpos.x--; write("*"); (Pseudocode)


Hast du vielleicht einen Beispiel Code fuer mich? Das obere kann bei mir leider nicht gehen da ich das ganze fuer Linux brauch
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.03.2005, 13:21 Uhr
~fasmat
Gast


Is zwar für einen 68k Prozessor geschrieben, sollte sich aber ohne viele Änderungen portieren lassen:


C++:
int getPwd(char *buffer, int y)
{
    volatile short key;  // pressed keys are saved here temporarily
    unsigned short i;    // the number of pressed keys
    unsigned short a;    // necessary for clearing the line

    buffer[0] = 0;
    i         = 0;

    if(kbhit())
      ngetchx();

    startint = 1;        // my interrupt must start now

    do
    {
        if (kbhit())
        {
          startint = 0;

          key = ngetchx();

          MoveTo(0, y);                  // move cursor to the beginning of the line
          for(a = 0; a <= LCD_WIDTH; a+= 6)
              printf(" ");                 // and clear the line with spaces

          if(key == KEY_APPS)
              return 0;

          if(key == KEY_BACKSPACE && i)  // if [BACKSPACE] was pressed an i isn't zero (no key was pressed yet)
          {
              i--;
              buffer[i] = 0;
          }
          else if(key >= ' ' && key <= '~') // if it is a "valid" key (only characters, numbers and spaces)
          {
              buffer[i++]=key;  // increase i by 1 and save key to buffer on position i
              buffer[i+1]=0;    // strings always have to end with a zero!
          }

          MoveTo((LCD_WIDTH-i*6)/2, y);

          if(key != KEY_ENTER)        // if key wasn't [ENTER]
              for(a = 1; a <= i; a++)   // print * for each character
              printf("*");
              
        resetint = 1;
        startint = 1;
      }
      
      if (seconds >= 5)
          return 2;

    } while(key != KEY_ENTER); // do this until [ENTER] is pressed

    return 1;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.03.2005, 13:57 Uhr
CaesarCortezz
minderer Student



C++:
unsigned short int maxlen;
getline(inf, dpass);                               // Auslesen aus Datei
        while(maxlen-- > 0 && now != 13)
        {
                       now = getch();
                       if(now == 0 || now == 0xE0)
                       {
                              getch();
                              continue;
                       }
                       if( now > 31)
                       {
                           upass += now;
                           cout << '*';
                       }
        }



so hab ichs gefunden...
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.03.2005, 14:58 Uhr
typecast
aka loddab
(Operator)


Mit ANSI nicht moeglich -> ->
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.03.2005, 15:04 Uhr
typecast
aka loddab
(Operator)


Du kannst entweder die Funktion getpass verwenden (allerdings steht in der man-page folgendes:
This function is obsolete. Do not use it.)

Beffy hat sich mal gedanken ueber einen Ersatz gemacht. Vielleicht kannst du auch das uebernehmen:

www.fun-soft.de/showtopic.php?threadid=8021


Bearbeitung von typecast:

Diese Funktionen geben allerdings keine Sternchen aus, sondern deaktivieren das Echo (also so, wie man das von Linux gewoehnt ist )


--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)

Dieser Post wurde am 06.03.2005 um 15:05 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.03.2005, 19:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ok bsp für ncurses:


C++:
int main(void)
{
  // ncurses initialisieren:
  initscr();
  noecho();
  cbreak();
  refresh();

  char passwort[33];

  int c = 0;
  for(int x = 0; x < 32; x++)
   {
    bool bbreak = false;
    while(true)
    {
      passwort[x] = getch();
      passwort[x+1] = '\0';
      if(passwort[x] == '\n' || passwort[x] == '\r')
      {
        passwort[x] = '\0';
        bbreak = true;
        break;
      }
      if(passwort[x] == 8 || passwort[x] == 127) // Backspace
      {
        passwort[x] = '\0';
        if(x > 0)
        {
          x--;
          passwort[x] = '\0';
        }
        std::cout << "*" << std::endl;
      }
  }

  return 0;
}



Sollte so gehen, geht sicher besser, aber habs nun schnell mal "hingeschustert"
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.03.2005, 11:20 Uhr
~libc
Gast


sollte auch mit standard termios zu lösen sein...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: