從標準輸入中隱藏使用者輸入
從標準輸入中擷取密碼等敏感資訊時,顯示鍵入的字元是不可取的。本文探討了在輸入過程中停用字元回顯的與平台無關的方法。
程式碼範例
考慮以下程式碼片段:
string passwd; cout << "Enter the password: "; getline(cin, passwd);
This程式碼提示使用者輸入密碼,但鍵入的字元會明顯顯示。為了隱藏使用者輸入,我們採用下面概述的特定於平台的技術。
平台特定的解決方案
Windows
#ifdef WIN32 #include <windows.h>
在oleWindows系統中,SetConsMode回顯。將ENABLE_ECHO_INPUT 設為0 來停用回顯:
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), mode & ~ENABLE_ECHO_INPUT);
Linux/macOS
#else #include <termios.h>
對於Linux 和macOS和更新終端設定。透過清除c_lflag 欄位中的ECHO 位元來停用回顯:
tty.c_lflag &^= ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &tty);
最終程式碼
結合這些技術,以下程式碼提供了一個跨平台解決方案來停用輸入密碼時回顯字元:
#include <iostream> #include <string> void SetStdinEcho(bool enable = true) { #ifdef WIN32 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); #else struct termios tty; tcgetattr(STDIN_FILENO, &tty); if (!enable) tty.c_lflag &^= ECHO; else tty.c_lflag |= ECHO; (void)tcsetattr(STDIN_FILENO, TCSANOW, &tty); #endif } int main() { SetStdinEcho(false); std::string password; std::cin >> password; SetStdinEcho(true); std::cout << password << std::endl; return 0; }
以上是如何在密碼輸入期間隱藏控制台中的使用者輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!