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
Libérer: 2024-12-21 09:06:11
original
439 Les gens l'ont consulté

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

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

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

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

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!

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