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
Freigeben: 2025-01-01 13:01:10
Original
366 Leute haben es durchsucht

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);
Nach dem Login kopieren

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>
Nach dem Login kopieren

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);
Nach dem Login kopieren

Linux/macOS

#else
#include <termios.h>
Nach dem Login kopieren

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);
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage