Maison > développement back-end > C++ > Comment puis-je obtenir en toute sécurité la saisie du mot de passe en C sans faire écho à la console ?

Comment puis-je obtenir en toute sécurité la saisie du mot de passe en C sans faire écho à la console ?

DDD
Libérer: 2024-12-20 05:59:12
original
622 Les gens l'ont consulté

How Can I Securely Obtain Password Input in C   Without Echoing to the Console?

Saisie sécurisée du mot de passe en C

Pour protéger la confidentialité des utilisateurs, il est souvent souhaitable d'empêcher que les mots de passe saisis via la saisie standard ne soient renvoyés à la console . Voici comment désactiver l'écho à l'aide d'une approche indépendante du système :

Présentation

Ce problème peut être résolu sur les systèmes d'exploitation Windows et de type UNIX. La solution consiste à modifier les paramètres d'entrée standard pour désactiver l'écho.

Windows

Pour les systèmes Windows, utilisez l'API Win32 :

#include <windows.h>

void SetStdinEcho(bool enable = true)
{
    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);
}
Copier après la connexion

Systèmes de type UNIX

Pour les systèmes de type UNIX, utilisez le termios bibliothèque :

#include <termios.h>
#include <unistd.h>

void SetStdinEcho(bool enable = true)
{
    struct termios tty;
    tcgetattr(STDIN_FILENO, &tty);
    if (!enable)
        tty.c_lflag &= ~ECHO;
    else
        tty.c_lflag |= ECHO;

    (void)tcsetattr(STDIN_FILENO, TCSANOW, &tty);
}
Copier après la connexion

Utilisation

Pour supprimer l'écho lors de la récupération du mot de passe :

SetStdinEcho(false);
std::string password;
std::cin >> password;
SetStdinEcho(true);
Copier après la connexion

Exemple

#include <iostream>
#include <string>

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal