ホームページ >バックエンド開発 >C++ >コンソールにエコーせずに C でパスワード入力を安全に取得するにはどうすればよいですか?

コンソールにエコーせずに C でパスワード入力を安全に取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-20 05:59:12621ブラウズ

How Can I Securely Obtain Password Input in C   Without Echoing to the Console?

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

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