📜  在C ++中以密码作为输入(1)

📅  最后修改于: 2023-12-03 15:37:34.386000             🧑  作者: Mango

在C++中以密码作为输入

在C++中以密码作为输入是一种常见的需求,它可以用于保护用户输入的敏感信息,例如银行账号密码、用户密码等。在本文中,我们将介绍如何实现在C++中以密码作为输入。

实现

首先,我们需要禁止用户输入的明文显示在终端上。我们可以使用以下代码来达到这个效果:

#include <iostream>
#include <string>
#include <conio.h> // for getch() and getche()

// Disable console echo
void DisableConsoleEcho()
{    
    DWORD mode;
    HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);
    GetConsoleMode(handle, &mode);
    SetConsoleMode(handle, mode & ~ENABLE_ECHO_INPUT);
}

// Enable console echo
void EnableConsoleEcho()
{    
    DWORD mode;
    HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);
    GetConsoleMode(handle, &mode);
    SetConsoleMode(handle, mode | ENABLE_ECHO_INPUT);
}

int main()
{
    std::string password;
    std::cout << "Enter password: ";
    DisableConsoleEcho(); // Disable echo
    getline(std::cin, password);
    EnableConsoleEcho(); // Enable echo again
    std::cout << "\nEntered password: " << password << std::endl;
    return 0;
}

这段代码使用了Windows API函数GetStdHandle()、GetConsoleMode()和SetConsoleMode()来禁止/启用控制台的输入回显功能。我们可以使用conio库中的getch()和getche()函数来读取键盘输入,它们与标准输入/输出流无关。

我们也可以在Linux或MacOS上使用类似的方法来禁用终端回显,例如使用termios库中的tcgetattr()和tcsetattr()函数。

总结

在C++中以密码作为输入是一种简单而有效的方法,可以保护用户输入的敏感信息。我们通过禁止/启用控制台回显来实现密码输入,这可以防止用户的密码被明文显示出来。