Heim >Backend-Entwicklung >C++ >Wie kann ich die Passworteingabe in C sicher erhalten, ohne dass eine Rückmeldung an die Konsole erfolgt?

Wie kann ich die Passworteingabe in C sicher erhalten, ohne dass eine Rückmeldung an die Konsole erfolgt?

DDD
DDDOriginal
2024-12-20 05:59:12646Durchsuche

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

Sichere Passworteingabe in C

Um die Privatsphäre der Benutzer zu schützen, ist es oft wünschenswert, zu verhindern, dass über die Standardeingabe eingegebene Passwörter an die Konsole übertragen werden . So deaktivieren Sie das Echo mit einem systemunabhängigen Ansatz:

Übersicht

Dieses Problem kann sowohl auf Windows- als auch auf UNIX-ähnlichen Betriebssystemen behoben werden. Die Lösung besteht darin, die Standardeingabeeinstellungen zu ändern, um das Echo zu deaktivieren.

Windows

Für Windows-Systeme verwenden Sie die Win32-API:

#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);
}

UNIX-ähnliche Systeme

Für UNIX-ähnliche Systeme verwenden Sie die Begriffe Bibliothek:

#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);
}

Verwendung

So unterdrücken Sie das Echo beim Abrufen des Passworts:

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

Beispiel

#include <iostream>
#include <string>

int main()
{
    SetStdinEcho(false);

    std::string password;
    std::cin >> password;

    SetStdinEcho(true);

    std::cout << password << std::endl;

    return 0;
}

Das obige ist der detaillierte Inhalt vonWie kann ich die Passworteingabe in C sicher erhalten, ohne dass eine Rückmeldung an die Konsole erfolgt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn