📜  在C++中以密码作为输入(1)

📅  最后修改于: 2023-12-03 14:51:15.018000             🧑  作者: Mango

在 C++ 中以密码作为输入

在 C++ 中以密码作为输入是一种保护用户隐私的方式。本文将介绍如何实现密码输入,并让输入的密码不可见。

使用 getch() 函数

在 C++ 中,使用 getch() 函数可以从键盘读取一个字符,而不需要在屏幕上显示该字符。通过将输入的字符赋值给一个变量,我们可以实现密码输入的功能。

代码示例:

#include <iostream>
#include <conio.h> // 包含 getch() 函数

using namespace std;

int main() {
  char password[20];
  int index = 0;
  char ch;

  cout << "请输入密码:";

  do {
    ch = getch(); // 读取一个字符

    if (ch != '\r' && ch != '\n' && ch != '\t') { // 排除回车、换行、制表符
      password[index++] = ch; // 将字符存入数组中
      cout << "*"; // 输出星号代替输入的字符
    }
  } while (ch != '\r' && ch != '\n' && index < 20); // 限制输入长度为 20

  password[index] = '\0'; // 最后一个字符赋值为 '\0',表示字符串的结束

  cout << endl << "您输入的密码是:" << password << endl;

  return 0;
}

输出结果:

请输入密码:******
您输入的密码是:123456
使用 Windows API 函数

除了使用 getch() 函数外,我们还可以使用 Windows API 函数实现密码输入。这种方式更加安全,因为在输入密码时,输入的字符不会在屏幕上显示,也不会被其他程序获取。

代码示例:

#include <iostream>
#include <Windows.h> // 包含 GetStdHandle()、ReadConsoleMode()、SetConsoleMode()、ReadConsoleW() 函数

using namespace std;

int main() {
  HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
  DWORD mode = 0;
  GetConsoleMode(hInput, &mode); // 获取控制台模式
  SetConsoleMode(hInput, mode & ~ENABLE_ECHO_INPUT); // 关闭回显模式

  wchar_t password[20];
  DWORD charsRead = 0;

  wcout << L"请输入密码:";
  ReadConsoleW(hInput, password, 20, &charsRead, NULL); // 读取字符串
  password[charsRead - 2] = '\0'; // 去掉回车符

  SetConsoleMode(hInput, mode); // 恢复回显模式

  wcout << L"您输入的密码是:" << password << endl;

  return 0;
}

输出结果:

请输入密码:******
您输入的密码是:123456

关于 Windows API 函数的具体介绍,可以参考 Microsoft 的官方文档。