首页 > 后端开发 > C++ > 如何在不回显控制台的情况下安全获取C中输入的密码?

如何在不回显控制台的情况下安全获取C中输入的密码?

DDD
发布: 2024-12-20 05:59:12
原创
623 人浏览过

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 系统,请使用termios 库:

#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);
}
登录后复制

用法

检索密码时抑制回显:

SetStdinEcho(false);
std::string password;
std::cin >> password;
SetStdinEcho(true);
登录后复制

示例

#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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板