C 中的安全密码输入
为了保护用户隐私,通常需要防止通过标准输入输入的密码回显到控制台。以下是如何使用与系统无关的方法禁用回显:
概述
此问题可以在 Windows 和类 UNIX 操作系统上解决。解决方案包括修改标准输入设置以禁用回显。
Windows
对于 Windows 系统,请使用 Win32 API:
#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); }
类 UNIX 系统
对于类 UNIX 系统,请使用termios 库:
#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); }
用法
检索密码时抑制回显:
SetStdinEcho(false); std::string password; std::cin >> password; SetStdinEcho(true);
示例
#include <iostream> #include <string> int main() { SetStdinEcho(false); std::string password; std::cin >> password; SetStdinEcho(true); std::cout << password << std::endl; return 0; }
以上是如何在不回显控制台的情况下安全获取C中输入的密码?的详细内容。更多信息请关注PHP中文网其他相关文章!