Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membaca Kata Laluan Dengan Selamat Menggunakan std::cin Tanpa Bergema ke Konsol?

Bagaimanakah Saya Boleh Membaca Kata Laluan Dengan Selamat Menggunakan std::cin Tanpa Bergema ke Konsol?

Susan Sarandon
Susan Sarandonasal
2024-12-23 22:34:10914semak imbas

How Can I Securely Read Passwords Using std::cin Without Echoing to the Console?

Input Kata Laluan Selamat dengan std::cin

Apabila memperoleh maklumat pengguna yang sensitif, seperti kata laluan, adalah penting untuk menghalang aksara yang ditaip daripada sedang bergema pada skrin untuk kebimbangan privasi. Untuk mencapainya dengan std::cin, mekanisme khusus platform digunakan.

Penyelesaian Windows:

Windows menggunakan fungsi SetConsoleMode untuk menogol gelagat getaran. Coretan kod di bawah menetapkan gema dilumpuhkan dengan mengosongkan bendera ENABLE_ECHO_INPUT:

#ifdef WIN32
#include <windows.h>

...

HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_ECHO_INPUT;
SetConsoleMode(hStdin, mode);
#endif

Penyelesaian Unix (Linux/macOS):

Sistem berasaskan Unix bergantung pada perpustakaan termios dan fungsi tcsetattrnya. Berikut ialah kod untuk mematikan gema:

#else
#include <termios.h>

...

struct termios tty;
tcgetattr(STDIN_FILENO, &tty);
tty.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &tty);
#endif

Penggunaan Contoh:

Dengan fungsi melumpuhkan gema, berikut ialah cara menggunakan std::cin to baca kata laluan dengan selamat:

#include <iostream>
#include <string>

...

SetStdinEcho(false);
std::string password;
std::cin >> password;
SetStdinEcho(true);

Dengan menggunakan kaedah khusus platform ini, anda boleh memastikan bahawa kata laluan pengguna tidak bergema pada skrin, mengekalkan kedua-dua privasi dan keselamatan dalam aplikasi anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membaca Kata Laluan Dengan Selamat Menggunakan std::cin Tanpa Bergema ke Konsol?. 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