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!