Menyembunyikan Input Pengguna daripada Input Standard
Apabila mendapatkan semula maklumat sensitif seperti kata laluan daripada input standard, memaparkan aksara yang ditaip adalah tidak diingini. Artikel ini meneroka kaedah agnostik platform untuk melumpuhkan bergema aksara semasa input.
Contoh Kod
Pertimbangkan coretan kod berikut:
string passwd; cout << "Enter the password: "; getline(cin, passwd);
Ini kod menggesa pengguna untuk memasukkan kata laluan, tetapi aksara yang ditaip dipaparkan dengan jelas. Untuk menyembunyikan input pengguna, kami menggunakan teknik khusus platform yang digariskan di bawah.
Penyelesaian Khusus Platform
Windows
#ifdef WIN32 #include <windows.h>
Dalam sistem Windows, SetConsoleMode boleh digunakan untuk menogol gema aksara. Lumpuhkan gema dengan menetapkan ENABLE_ECHO_INPUT kepada 0:
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), mode & ~ENABLE_ECHO_INPUT);
Linux/macOS
#else #include <termios.h>
Untuk sistem Linux dan macOS, tcgetattr dan tcsetattr digunakan untuk mendapatkan dan mengemas kini tetapan terminal. Lumpuhkan gema dengan mengosongkan bit ECHO dalam medan c_lflag:
tty.c_lflag &^= ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &tty);
Kod Akhir
Menggabungkan teknik ini, kod berikut menyediakan penyelesaian merentas platform untuk melumpuhkan aksara bergema semasa input kata laluan:
#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; }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyembunyikan Input Pengguna daripada Konsol Semasa Kemasukan Kata Laluan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!