Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mendapatkan Input Kata Laluan dengan Selamat dalam C Tanpa Bergema ke Konsol?

Bagaimanakah Saya Boleh Mendapatkan Input Kata Laluan dengan Selamat dalam C Tanpa Bergema ke Konsol?

DDD
Lepaskan: 2024-12-20 05:59:12
asal
646 orang telah melayarinya

How Can I Securely Obtain Password Input in C   Without Echoing to the Console?

Input Kata Laluan Selamat dalam C

Untuk melindungi privasi pengguna, selalunya wajar untuk menghalang kata laluan yang dimasukkan melalui input standard daripada digema ke konsol . Begini cara untuk melumpuhkan gema menggunakan pendekatan agnostik sistem:

Ikhtisar

Isu ini boleh ditangani pada sistem pengendalian seperti Windows dan UNIX. Penyelesaiannya melibatkan pengubahsuaian tetapan input standard untuk melumpuhkan gema.

Windows

Untuk sistem Windows, gunakan API Win32:

#include <windows.h>

void SetStdinEcho(bool enable = true)
{
    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);
}
Salin selepas log masuk

Sistem seperti UNIX

Untuk sistem seperti UNIX, gunakan termios perpustakaan:

#include <termios.h>
#include <unistd.h>

void SetStdinEcho(bool enable = true)
{
    struct termios tty;
    tcgetattr(STDIN_FILENO, &tty);
    if (!enable)
        tty.c_lflag &= ~ECHO;
    else
        tty.c_lflag |= ECHO;

    (void)tcsetattr(STDIN_FILENO, TCSANOW, &tty);
}
Salin selepas log masuk

Penggunaan

Untuk menyekat gema semasa mendapatkan kata laluan:

SetStdinEcho(false);
std::string password;
std::cin >> password;
SetStdinEcho(true);
Salin selepas log masuk

Contoh

#include <iostream>
#include <string>

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 Mendapatkan Input Kata Laluan dengan Selamat dalam C Tanpa Bergema ke Konsol?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan