ホームページ >バックエンド開発 >C++ >安全なパスワード入力のために C の `std::cin` で Echo を無効にするにはどうすればよいですか?

安全なパスワード入力のために C の `std::cin` で Echo を無効にするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-21 09:06:11407ブラウズ

How Can I Disable Echo in C  's `std::cin` for Secure Password Input?

パスワード入力の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。