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 中国語 Web サイトの他の関連記事を参照してください。