Maison >développement back-end >C++ >Comment puis-je désactiver l'écho dans `std::cin` de C pour la saisie sécurisée du mot de passe ?

Comment puis-je désactiver l'écho dans `std::cin` de C pour la saisie sécurisée du mot de passe ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-21 09:06:11406parcourir

How Can I Disable Echo in C  's `std::cin` for Secure Password Input?

Désactivation de l'écho dans std::cin pour la saisie du mot de passe

Dans les scénarios où les entrées sensibles telles que les mots de passe doivent être protégées contre l'écho, cela devient crucial pour supprimer la visibilité des caractères lors de la saisie de l’utilisateur. Cet article examine les méthodes indépendantes du système d'exploitation pour désactiver l'écho dans std::cin, un flux d'entrée standard fondamental en C .

Considérez l'extrait de code suivant :

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

Ce code invite le L'utilisateur peut saisir un mot de passe, mais il fait visiblement écho aux caractères saisis, ce qui rend l'entrée vulnérable à d'éventuelles écoutes clandestines. Pour résoudre ce problème, les solutions ci-dessous offrent des moyens sécurisés de masquer les caractères du mot de passe lors de la saisie.

Windows :

Pour les systèmes Windows, la fonction SetConsoleMode permet de contrôler la saisie standard. en écho. Passer ENABLE_ECHO_INPUT comme indicateur active l'écho, tandis que sa négation le désactive, garantissant que les mots de passe restent masqués lors de la saisie.

HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_ECHO_INPUT;
SetConsoleMode(hStdin, mode);

POSIX :

Sur les systèmes compatibles POSIX , les fonctions tcgetattr et tcsetattr sont utilisées pour gérer le paramètre d'écho pour stdin. La désactivation de l'indicateur ECHO supprime l'écho, permettant une saisie sécurisée du mot de passe.

struct termios tty;
tcgetattr(STDIN_FILENO, &tty);
tty.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &tty);

Exemple d'utilisation :

Un exemple d'implémentation intégrant les deux méthodes :

#ifdef WIN32
#include <windows.h>
#else
#include <termios.h>
#include <unistd.h>
#endif

void SetStdinEcho(bool enable = true)
{
#ifdef WIN32
    // Windows implementation
#else
    // POSIX implementation
#endif
}

int main()
{
    SetStdinEcho(false);
    string password;
    cin >> password;
    SetStdinEcho(true);
    cout << password << endl;
    return 0;
}

En utilisant ces techniques, les développeurs peuvent améliorer efficacement la sécurité des mots de passe en empêchant l'écho, garantissant ainsi une expérience de saisie utilisateur plus sécurisée pour les informations sensibles. récupération.

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!

Déclaration:
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