표준 입력에서 사용자 입력 숨기기
표준 입력에서 비밀번호와 같은 민감한 정보를 검색할 때 입력한 문자를 표시하는 것은 바람직하지 않습니다. 이 문서에서는 입력 중 문자 반향을 비활성화하는 플랫폼 독립적인 방법을 살펴봅니다.
코드 예
다음 코드 조각을 고려하세요.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!