안녕하세요, 오늘은 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++에서 비밀번호 입력 시 '*'로 표시하는 방법에 대해 알아보았습니다. 이 기능은 사용자의 비밀번호를 안전하게 보호하는 데 도움이 될 것입니다.
댓글