パスワード入力の std::cin でのエコーを無効にする
パスワードなどの機密性の高い入力をエコーから保護する必要があるシナリオでは、次のようになります。ユーザー入力中の文字の可視性を抑制するために重要です。この記事では、C の基本的な標準入力ストリームである std::cin のエコーを無効にする OS に依存しない方法について詳しく説明します。
次のコード スニペットを考えてみましょう。
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 関数は、エコー設定を管理するために使用されます。標準入力。 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 中国語 Web サイトの他の関連記事を参照してください。