Maison >développement back-end >C++ >Comment puis-je lire en toute sécurité les mots de passe à l'aide de std :: cin sans faire écho à la console ?

Comment puis-je lire en toute sécurité les mots de passe à l'aide de std :: cin sans faire écho à la console ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-23 22:34:10914parcourir

How Can I Securely Read Passwords Using std::cin Without Echoing to the Console?

Saisie sécurisée du mot de passe avec std::cin

Lors de l'acquisition d'informations utilisateur sensibles, telles que des mots de passe, il est crucial d'empêcher les caractères saisis de étant repris sur l'écran pour des raisons de confidentialité. Pour ce faire avec std::cin, des mécanismes spécifiques à la plate-forme sont utilisés.

Solution Windows :

Windows utilise la fonction SetConsoleMode pour basculer le comportement d'écho. L'extrait de code ci-dessous désactive l'écho en effaçant l'indicateur ENABLE_ECHO_INPUT :

#ifdef WIN32
#include <windows.h>

...

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

Solution Unix (Linux/macOS) :

Les systèmes basés sur Unix s'appuient sur le bibliothèque termios et sa fonction tcsetattr. Voici le code pour désactiver l'écho :

#else
#include <termios.h>

...

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

Exemple d'utilisation :

Avec la fonction de désactivation de l'écho en place, voici comment utiliser std::cin pour lire un mot de passe en toute sécurité :

#include <iostream>
#include <string>

...

SetStdinEcho(false);
std::string password;
std::cin >> password;
SetStdinEcho(true);

En employant ces méthodes spécifiques à la plate-forme, vous pouvez vous assurer que les mots de passe des utilisateurs ne sont pas répercutés sur l'écran, préservant à la fois la confidentialité et la sécurité de votre application.

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