>백엔드 개발 >C++ >콘솔에 에코되지 않고 C에서 비밀번호 입력을 안전하게 얻으려면 어떻게 해야 합니까?

콘솔에 에코되지 않고 C에서 비밀번호 입력을 안전하게 얻으려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-12-20 05:59:12622검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.