본문 바로가기
프로그래밍/C&C++

[C++] 비밀번호 입력 시 '*'로 표시하기

by wyatti 2023. 6. 14.

이 글에서는 C++을 사용하여 비밀번호를 안전하게 입력받는 방법을 배웁니다. Windows와 Linux 환경에서 사용할 수 있는 방법과 C++11 이상의 버전에서 사용 가능한 방법을 다루고 있으며, 각각 세 가지 예제를 통해 상세히 설명하고 있습니다.
C++ 비밀번호 입력 시 *로 표시하는 방법 C++ 보안 팁과 예제

 

안녕하세요, 오늘은 C++에서 비밀번호 입력 시 사용자에게 문자 대신 '*'로 표시하는 방법에 대해 알아보겠습니다. 이 방법을 사용하면 사용자의 비밀번호가 노출되지 않아 보안을 높일 수 있습니다.

C++에서는 표준 라이브러리에 속한 iostream 라이브러리를 사용하여 사용자로부터 입력을 받을 수 있습니다. 그러나 이 방법으로는 비밀번호를 '*'로 표시하는 것이 불가능합니다. 이를 해결하기 위해 conio.h 또는 termios.h와 같은 라이브러리를 사용해야 합니다.

 

 

예제 1: Windows에서 conio.h 사용하기

Windows 환경에서는 conio.h 라이브러리를 사용하여 비밀번호를 '*'로 표시할 수 있습니다. 아래 코드를 살펴봅시다.

#include <iostream>
#include <conio.h>

int main() {
    char password[25];
    int i = 0;

    std::cout << "Password: ";

    // _getch()는 입력을 버퍼에 저장하지 않고 즉시 반환합니다.
    // 따라서 화면에 문자가 표시되지 않습니다.
    while((password[i] = _getch()) != '\r') {
        std::cout << "*";
        i++;
    }

    password[i] = '\0'; // 문자열의 끝을 표시합니다.
    std::cout << "\nYour password is: " << password;
    
    return 0;
}

이 코드에서 _getch() 함수는 conio.h 라이브러리에 있는 함수로, 입력을 즉시 반환하므로 화면에 문자가 표시되지 않습니다. 따라서 이 함수로 사용자로부터 입력을 받고, 이를 ''로 대체하여 출력하면 비밀번호 입력 시 ''로 표시할 수 있습니다.

 

 

예제 2: Linux에서 termios.h 사용하기

Linux 환경에서는 termios.h 라이브러리를 사용하여 비밀번호를 '*'로 표시할 수 있습니다. 아래 코드를 살펴봅시다.

#include <iostream>
#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);
}

int main() {
    std::string password;

    std::cout << "Enter password: ";
    SetStdinEcho(false);  // 터미널에 출력되지 않게 설정
    std::getline(std::cin, password);
    SetStdinEcho(true);   // 다시 터미널에 출력되게 설정

    std::cout << "\nYour password is: " << password;

    return 0;
}

이 코드에서는 SetStdinEcho 함수를 사용하여 터미널에 문자가 출력되는 것을 제어합니다. 이 함수는 termios.h 라이브러리를 사용하여 터미널 설정을 변경합니다.

 

 

예제 3: C++11 이상에서 getpass 사용하기

C++11 이상에서는 표준 라이브러리에 속한 getpass 함수를 사용하여 비밀번호를 '*'로 표시할 수 있습니다. 아래 코드를 살펴봅시다.

#include <iostream>
#include <unistd.h>

int main() {
    char* password;

    password = getpass("Password: ");  // getpass 함수는 입력을 받으면서 '*'로 표시합니다.

    std::cout << "Your password is: " << password;

    return 0;
}

getpass 함수는 사용자로부터 입력을 받으면서 이를 ''로 표시하는 기능이 내장되어 있습니다. 이 함수를 사용하면 쉽게 비밀번호 입력 시 ''로 표시할 수 있습니다.

이상으로 C++에서 비밀번호 입력 시 '*'로 표시하는 방법에 대해 알아보았습니다. 이 기능은 사용자의 비밀번호를 안전하게 보호하는 데 도움이 될 것입니다.

댓글