> 백엔드 개발 > C++ > 안전한 비밀번호 입력을 위해 C의 `std::cin`에서 에코를 비활성화하려면 어떻게 해야 합니까?

안전한 비밀번호 입력을 위해 C의 `std::cin`에서 에코를 비활성화하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-12-21 09:06:11
원래의
404명이 탐색했습니다.

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 함수는 stdin의 에코 설정을 관리하는 데 사용됩니다. 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`에서 에코를 비활성화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿