21xrx.com
2024-12-22 21:25:02 Sunday
登录
文章检索 我的文章 写文章
C++如何隐藏输入
2023-07-08 13:15:04 深夜i     --     --
C++ 隐藏 输入 密码 控制台

C++是一种高级编程语言,用于编写各种类型的应用程序。在某些情况下,我们需要在程序中隐藏用户输入的内容,以确保安全性和保护用户隐私。在本文中,我们将介绍如何使用C++来隐藏用户的输入。

在C++中,我们可以使用getch()函数来读取用户输入。这个函数从键盘读取一个字符,并将其返回到程序中。然而,这种方法存在一个问题,就是无法隐藏用户的输入,因为在终端上用户输入的字符会直接显示出来。

为了解决这个问题,我们可以使用一些技巧来隐藏用户的输入。其中一个方法是在终端上输出星号(*)或其他字符来代替用户的输入。这可以通过使用循环来实现,如下面的代码所示:


#include <iostream>

#include <conio.h>

using namespace std;

int main()

{

  char password[20];

  int i = 0;

  cout << "Enter password: ";

  while (i < 20)

  {

    password[i] = _getch();

    if (password[i] == '\r')

      break;

    cout << "*";

    i++;

  }

  password[i] = '\0';

  cout << endl << "Password entered: " << password << endl;

  return 0;

}

在这个例子中,我们定义了一个字符数组来存储密码,使用了_getch()函数来读取用户的输入,并使用循环输出星号来代替用户的输入。当用户输入回车键时,循环终止,并将输入的密码存储到字符数组中,最后输出输入的密码。

另一个方法是使用Windows API中的SetConsoleMode()函数来隐藏终端上的输入。SetConsoleMode()函数可以设置终端的属性,包括将输入模式设置为无回显模式(输入的字符不会在终端上显示出来)。代码如下:


#include <iostream>

#include <conio.h>

#include <windows.h>

using namespace std;

int main()

{

  char password[20];

  int i = 0;

  HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);

  DWORD mode = 0;

  GetConsoleMode(hStdin, &mode);

  SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT));

  cout << "Enter password: ";

  while (i < 20)

  {

    password[i] = _getch();

    if (password[i] == '\r')

      break;

    i++;

  }

  password[i] = '\0';

  SetConsoleMode(hStdin, mode);

  cout << endl << "Password entered: " << password << endl;

  return 0;

}

在这个例子中,我们先获取了标准输入句柄,然后使用GetConsoleMode()函数获取了终端的属性。接着,将输入模式设置为无回显模式,并在循环读取用户输入时不输出字符。当输入结束后,将输入模式恢复到原来的状态,并输出输入的密码。

总之,在C++中隐藏用户的输入是一项重要的安全措施,可以保护用户的隐私和程序的安全性。我们可以使用getch()函数和循环输出星号的方法,也可以使用Windows API中的SetConsoleMode()函数来实现。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复