>백엔드 개발 >C++ >콘솔에 에코되지 않고 std::cin을 사용하여 비밀번호를 안전하게 읽을 수 있는 방법은 무엇입니까?

콘솔에 에코되지 않고 std::cin을 사용하여 비밀번호를 안전하게 읽을 수 있는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-23 22:34:10914검색

How Can I Securely Read Passwords Using std::cin Without Echoing to the Console?

std::cin을 사용한 안전한 비밀번호 입력

비밀번호와 같은 민감한 사용자 정보를 획득할 때 입력된 문자를 방지하는 것이 중요합니다. 개인 정보 보호 문제로 인해 화면에 에코가 표시됩니다. std::cin을 사용하여 이를 수행하려면 플랫폼별 메커니즘이 사용됩니다.

Windows 솔루션:

Windows는 SetConsoleMode 기능을 활용하여 에코 동작을 전환합니다. 아래 코드 조각은 ENABLE_ECHO_INPUT 플래그를 지워 에코를 비활성화하도록 설정합니다.

#ifdef WIN32
#include <windows.h>

...

HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_ECHO_INPUT;
SetConsoleMode(hStdin, mode);
#endif

Unix(Linux/macOS) 해결책:

Unix 기반 시스템은 termios 라이브러리 및 해당 tcsetattr 함수. 에코를 끄는 코드는 다음과 같습니다.

#else
#include <termios.h>

...

struct termios tty;
tcgetattr(STDIN_FILENO, &tty);
tty.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &tty);
#endif

샘플 사용법:

에코 비활성화 기능이 있는 경우 std::cin을 사용하여 다음을 수행합니다. 안전하게 비밀번호 읽기:

#include <iostream>
#include <string>

...

SetStdinEcho(false);
std::string password;
std::cin >> password;
SetStdinEcho(true);

이러한 플랫폼별 방법을 사용하면 다음을 보장할 수 있습니다. 사용자 비밀번호는 화면에 표시되지 않으므로 애플리케이션의 개인정보 보호와 보안이 모두 유지됩니다.

위 내용은 콘솔에 에코되지 않고 std::cin을 사용하여 비밀번호를 안전하게 읽을 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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