首頁 >後端開發 >C++ >如何停用 C 的 `std::cin` 中的 Echo 以實現安全密碼輸入?

如何停用 C 的 `std::cin` 中的 Echo 以實現安全密碼輸入?

Barbara Streisand
Barbara Streisand原創
2024-12-21 09:06:11405瀏覽

How Can I Disable Echo in C  's `std::cin` for Secure Password Input?

在密碼輸入時在std::cin 中停用Echo

在需要保護密碼等敏感輸入不被回顯的場景中,它變成對於在使用者輸入期間抑製字元可見性至關重要。本文深入研究了與作業系統無關的方法,用於在 std::cin(C 中的基本標準輸入流)中停用 echo。

考慮以下程式碼片段:

string passwd;
cout << "Enter the password: ";
getline(cin, passwd);

此程式碼提示使用者輸入密碼,但明顯回顯鍵入的字符,從而使輸入容易受到潛在的竊聽。為了解決這個問題,以下解決方案提供了在輸入過程中隱藏密碼字元的安全方法。

Windows:

對於 Windows 系統,SetConsoleMode 函數提供標準輸入的控制迴聲。將 ENABLE_ECHO_INPUT 作為標誌傳遞會啟用回顯,而其否定會停用回顯,確保密碼在輸入過程中保持隱藏狀態。

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

POSIX:

在 POSIX 相容系統上中,tcgetattr 和 tcsetattr 函數用於管理 stdin 的回顯設定。取消設定 ECHO 標誌會抑制回顯,從而允許安全的密碼輸入。

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

範例用法:

結合這兩種方法的範例實作:

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

透過利用這些技術,開發者可以利用這些技術,開發者可以使用透過防止回顯來有效增強密碼安全性,確保敏感資訊的使用者輸入體驗更加安全檢索。

以上是如何停用 C 的 `std::cin` 中的 Echo 以實現安全密碼輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn