Melumpuhkan Echo in std::cin untuk Input Kata Laluan
Dalam senario di mana input sensitif seperti kata laluan perlu dilindungi daripada bergema, ia menjadi penting untuk menyekat keterlihatan aksara semasa input pengguna. Artikel ini menyelidiki kaedah OS-agnostik untuk melumpuhkan gema dalam std::cin, aliran input standard asas dalam C .
Pertimbangkan coretan kod berikut:
string passwd; cout << "Enter the password: "; getline(cin, passwd);
Kod ini menggesa pengguna untuk memasukkan kata laluan tetapi jelas menggemakan aksara yang ditaip, menjadikan input terdedah kepada potensi mencuri dengar. Untuk menangani isu ini, penyelesaian di bawah menawarkan cara selamat untuk menyembunyikan aksara kata laluan semasa input.
Windows:
Untuk sistem Windows, fungsi SetConsoleMode menyediakan kawalan ke atas input standard bergema. Melepasi ENABLE_ECHO_INPUT sebagai bendera membolehkan gema, manakala penafiannya menyahdayakannya, memastikan kata laluan kekal tersembunyi semasa input.
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); DWORD mode; GetConsoleMode(hStdin, &mode); mode &= ~ENABLE_ECHO_INPUT; SetConsoleMode(hStdin, mode);
POSIX:
Pada sistem yang mematuhi POSIX , fungsi tcgetattr dan tcsetattr digunakan untuk mengurus tetapan gema untuk stdin. Menyahtetap bendera ECHO menyekat gema, membenarkan input kata laluan selamat.
struct termios tty; tcgetattr(STDIN_FILENO, &tty); tty.c_lflag &= ~ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &tty);
Contoh Penggunaan:
Contoh pelaksanaan yang menggabungkan kedua-dua kaedah:
#ifdef WIN32 #include <windows.h> #else #include <termios.h> #include <unistd.h> #endif void SetStdinEcho(bool enable = true) { #ifdef WIN32 // Windows implementation #else // POSIX implementation #endif } int main() { SetStdinEcho(false); string password; cin >> password; SetStdinEcho(true); cout << password << endl; return 0; }
Dengan menggunakan teknik ini, pembangun boleh meningkatkan keselamatan kata laluan dengan berkesan dengan menghalang bergema, memastikan pengalaman input pengguna yang lebih selamat untuk mendapatkan maklumat sensitif.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Lumpuhkan Gema dalam `std::cin` C untuk Input Kata Laluan Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!