Masquer les entrées utilisateur de l'entrée standard
Lors de la récupération d'informations sensibles telles que des mots de passe à partir de l'entrée standard, l'affichage des caractères saisis n'est pas souhaitable. Cet article explore les méthodes indépendantes de la plate-forme pour désactiver l'écho des caractères lors de la saisie.
Exemple de code
Considérez l'extrait de code suivant :
string passwd; cout << "Enter the password: "; getline(cin, passwd);
Ceci Le code invite l'utilisateur à saisir un mot de passe, mais les caractères saisis sont visiblement affichés. Pour masquer les entrées des utilisateurs, nous utilisons des techniques spécifiques à la plate-forme décrites ci-dessous.
Solutions spécifiques à la plate-forme
Windows
#ifdef WIN32 #include <windows.h>
Dans les systèmes Windows, SetConsoleMode peut être utilisé pour activer/désactiver l'écho des caractères. Désactivez l'écho en définissant ENABLE_ECHO_INPUT sur 0 :
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), mode & ~ENABLE_ECHO_INPUT);
Linux/macOS
#else #include <termios.h>
Pour les systèmes Linux et macOS, tcgetattr et tcsetattr sont utilisés pour récupérer et mettre à jour paramètres du terminal. Désactivez l'écho en effaçant le bit ECHO dans le champ c_lflag :
tty.c_lflag &^= ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &tty);
Code final
En combinant ces techniques, le code suivant fournit une solution multiplateforme pour désactiver caractère faisant écho lors de la saisie du mot de passe :
#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; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!