Maison > développement back-end > C++ > Comment puis-je masquer la saisie de l'utilisateur depuis la console lors de la saisie du mot de passe ?

Comment puis-je masquer la saisie de l'utilisateur depuis la console lors de la saisie du mot de passe ?

Mary-Kate Olsen
Libérer: 2025-01-01 13:01:10
original
366 Les gens l'ont consulté

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

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);
Copier après la connexion

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>
Copier après la connexion

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);
Copier après la connexion

Linux/macOS

#else
#include <termios.h>
Copier après la connexion

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);
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal