首頁 > 後端開發 > C++ > 如何在不回顯控制台的情況下安全取得C中輸入的密碼?

如何在不回顯控制台的情況下安全取得C中輸入的密碼?

DDD
發布: 2024-12-20 05:59:12
原創
622 人瀏覽過

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

C 中的安全密碼輸入

為了保護使用者隱私,通常需要防止透過標準輸入輸入的密碼回顯到控制台。以下是如何使用與系統無關的方法停用回顯:

概述

此問題可以在 Windows 和類別 UNIX 作業系統上解決。解決方案包括修改標準輸入設定以停用回顯。

Windows

對於Windows 系統,請使用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 系統

類UNIX 系統

#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);
}
登入後複製

類UNIX 系統

類UNIX 系統

SetStdinEcho(false);
std::string password;
std::cin >> password;
SetStdinEcho(true);
登入後複製
對於類UNIX 系統,請使用termios庫:

用法
#include <iostream>
#include <string>

int main()
{
    SetStdinEcho(false);

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

    SetStdinEcho(true);

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

    return 0;
}
登入後複製
檢索密碼時抑制回顯:示例

以上是如何在不回顯控制台的情況下安全取得C中輸入的密碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板