Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menyembunyikan Input Pengguna daripada Konsol Semasa Kemasukan Kata Laluan?

Bagaimanakah Saya Boleh Menyembunyikan Input Pengguna daripada Konsol Semasa Kemasukan Kata Laluan?

Mary-Kate Olsen
Lepaskan: 2025-01-01 13:01:10
asal
386 orang telah melayarinya

How Can I Hide User Input from the Console During Password Entry?

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

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

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

Linux/macOS

#else
#include <termios.h>
Salin selepas log masuk

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

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

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!

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