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
Lepaskan: 2024-12-21 09:06:11
asal
439 orang telah melayarinya

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan