Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Lumpuhkan Gema dalam `std::cin` C untuk Input Kata Laluan Selamat?

Bagaimanakah Saya Boleh Lumpuhkan Gema dalam `std::cin` C untuk Input Kata Laluan Selamat?

Barbara Streisand
Barbara Streisandasal
2024-12-21 09:06:11408semak imbas

How Can I Disable Echo in C  's `std::cin` for Secure Password Input?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn