Heim >Backend-Entwicklung >C++ >Wie kann ich Benutzereingaben während der Passworteingabe in der Konsole verbergen?

Wie kann ich Benutzereingaben während der Passworteingabe in der Konsole verbergen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-01 13:01:10405Durchsuche

How Can I Hide User Input from the Console During Password Entry?

Benutzereingaben aus der Standardeingabe ausblenden

Beim Abrufen vertraulicher Informationen wie Passwörter aus der Standardeingabe ist die Anzeige der eingegebenen Zeichen unerwünscht. In diesem Artikel werden plattformunabhängige Methoden zum Deaktivieren des Zeichenechos während der Eingabe untersucht.

Codebeispiel

Bedenken Sie den folgenden Codeausschnitt:

string passwd;
cout << "Enter the password: ";
getline(cin, passwd);

Dies Der Code fordert den Benutzer zur Eingabe eines Passworts auf, die eingegebenen Zeichen werden jedoch sichtbar angezeigt. Um Benutzereingaben zu verbergen, verwenden wir die unten beschriebenen plattformspezifischen Techniken.

Plattformspezifische Lösungen

Windows

#ifdef WIN32
#include <windows.h>

In Windows-Systemen kann SetConsoleMode verwendet werden, um das Zeichenecho umzuschalten. Deaktivieren Sie das Echo, indem Sie ENABLE_ECHO_INPUT auf 0 setzen:

SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), mode & ~ENABLE_ECHO_INPUT);

Linux/macOS

#else
#include <termios.h>

Für Linux- und macOS-Systeme werden tcgetattr und tcsetattr zum Abrufen und Aktualisieren verwendet Terminaleinstellungen. Deaktivieren Sie das Echo, indem Sie das ECHO-Bit im c_lflag-Feld löschen:

tty.c_lflag &^= ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &tty);

Endgültiger Code

Durch die Kombination dieser Techniken bietet der folgende Code eine plattformübergreifende Lösung zum Deaktivieren Zeichenecho während der Passworteingabe:

#include <iostream>
#include <string>

void SetStdinEcho(bool enable = true) {
  #ifdef WIN32
    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
    DWORD mode;
    GetConsoleMode(hStdin, &mode);

    if (!enable)
      mode &= ~ENABLE_ECHO_INPUT;
    else
      mode |= ENABLE_ECHO_INPUT;

    SetConsoleMode(hStdin, mode);
  #else
    struct termios tty;
    tcgetattr(STDIN_FILENO, &tty);
    if (!enable)
      tty.c_lflag &^= ECHO;
    else
      tty.c_lflag |= ECHO;

    (void)tcsetattr(STDIN_FILENO, TCSANOW, &tty);
  #endif
}

int main() {
  SetStdinEcho(false);

  std::string password;
  std::cin >> password;

  SetStdinEcho(true);

  std::cout << password << std::endl;

  return 0;
}

Das obige ist der detaillierte Inhalt vonWie kann ich Benutzereingaben während der Passworteingabe in der Konsole verbergen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn