ホームページ > バックエンド開発 > C++ > パスワード入力中にコンソールからのユーザー入力を非表示にするにはどうすればよいですか?

パスワード入力中にコンソールからのユーザー入力を非表示にするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-01 13:01:10
オリジナル
368 人が閲覧しました

How Can I Hide User Input from the Console During Password Entry?

標準入力からのユーザー入力の非表示

標準入力からパスワードなどの機密情報を取得する場合、入力された文字を表示することは望ましくありません。この記事では、入力中の文字エコーを無効にするプラットフォームに依存しない方法について説明します。

コード例

次のコード スニペットを考えてみましょう。

string passwd;
cout << "Enter the password: ";
getline(cin, passwd);
ログイン後にコピー

これこのコードではユーザーにパスワードの入力を求めますが、入力した文字は表示されます。ユーザー入力を隠すために、以下に概説するプラットフォーム固有の手法を採用しています。

プラットフォーム固有のソリューション

Windows

#ifdef WIN32
#include <windows.h>
ログイン後にコピー

Windows システムでは、SetConsoleMode を使用して文字エコーを切り替えることができます。 ENABLE_ECHO_INPUT を 0 に設定してエコーを無効にします。

SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), mode & ~ENABLE_ECHO_INPUT);
ログイン後にコピー

Linux/macOS

#else
#include <termios.h>
ログイン後にコピー

Linux および macOS システムの場合、取得および更新に tcgetattr および tcsetattr が使用されます。端末の設定。 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート