在密碼輸入時在std::cin 中停用Echo
在需要保護密碼等敏感輸入不被回顯的場景中,它變成對於在使用者輸入期間抑製字元可見性至關重要。本文深入研究了與作業系統無關的方法,用於在 std::cin(C 中的基本標準輸入流)中停用 echo。
考慮以下程式碼片段:
string passwd; cout << "Enter the password: "; getline(cin, passwd);
此程式碼提示使用者輸入密碼,但明顯回顯鍵入的字符,從而使輸入容易受到潛在的竊聽。為了解決這個問題,以下解決方案提供了在輸入過程中隱藏密碼字元的安全方法。
Windows:
對於 Windows 系統,SetConsoleMode 函數提供標準輸入的控制迴聲。將 ENABLE_ECHO_INPUT 作為標誌傳遞會啟用回顯,而其否定會停用回顯,確保密碼在輸入過程中保持隱藏狀態。
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); DWORD mode; GetConsoleMode(hStdin, &mode); mode &= ~ENABLE_ECHO_INPUT; SetConsoleMode(hStdin, mode);
POSIX:
在 POSIX 相容系統上中,tcgetattr 和 tcsetattr 函數用於管理 stdin 的回顯設定。取消設定 ECHO 標誌會抑制回顯,從而允許安全的密碼輸入。
struct termios tty; tcgetattr(STDIN_FILENO, &tty); tty.c_lflag &= ~ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &tty);
範例用法:
結合這兩種方法的範例實作:
#ifdef WIN32 #include <windows.h> #else #include <termios.h> #include <unistd.h> #endif void SetStdinEcho(bool enable = true) { #ifdef WIN32 // Windows implementation #else // POSIX implementation #endif } int main() { SetStdinEcho(false); string password; cin >> password; SetStdinEcho(true); cout << password << endl; return 0; }
透過利用這些技術,開發者可以利用這些技術,開發者可以使用透過防止回顯來有效增強密碼安全性,確保敏感資訊的使用者輸入體驗更加安全檢索。
以上是如何停用 C 的 `std::cin` 中的 Echo 以實現安全密碼輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!