使用 std::cin 保护密码输入
获取敏感用户信息(例如密码)时,防止输入的字符至关重要出于隐私考虑,屏幕上出现了回声。为了使用 std::cin 实现此目的,采用了特定于平台的机制。
Windows 解决方案:
Windows 使用 SetConsoleMode 函数来切换回显行为。下面的代码片段通过清除 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
Unix (Linux/macOS) 解决方案:
基于 Unix 的系统依赖于termios 库及其 tcsetattr 函数。以下是关闭回声的代码:
#else #include <termios.h> ... struct termios tty; tcgetattr(STDIN_FILENO, &tty); tty.c_lflag &= ~ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &tty); #endif
示例用法:
使用回声禁用功能后,以下是如何使用 std::cin 来安全地读取密码:
#include <iostream> #include <string> ... SetStdinEcho(false); std::string password; std::cin >> password; SetStdinEcho(true);
通过采用这些特定于平台的方法,您可以确保用户密码不会在屏幕上回显,从而维护应用程序中的隐私和安全。
以上是如何使用 std::cin 安全地读取密码而不回显到控制台?的详细内容。更多信息请关注PHP中文网其他相关文章!