C 终端用户输入

C Terminal User Input

我想知道是否可以隐藏或替换程序用户在终端中写入的内容。

当程序要求用户输入密码之类的内容时,用户按下某个键,而不是写入密码,而是写入*(例如:密码="AAABBB",但在终端中显示** **** 或者什么都没有)。

这与您输入 Windows/Mac 密码时的情况相同。

非常感谢!

Ayly_ / C 菜鸟

您可以这样做,但这将是非常系统特定的,具体取决于您的操作系统和其他因素。有些图书馆可以做你想做的事,比如 "curses",你可以看看。为了演示所涉及的黑客技术,我写了一些可以在我的 Ubuntu 笔记本电脑上运行的东西。 运行 这可能会弄乱您的终端设置,尤其是当您在程序中途中断时。我可以使用 "reset" 命令在 Ubuntu 上修复它或重新打开终端 window.

#include <termios.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#define MAX_LENGTH 20

int main()
{
  struct termios t, backup;
  tcgetattr(STDIN_FILENO, &t);
  backup=t;
  cfmakeraw(&t);
  tcsetattr(STDIN_FILENO, TCSANOW, &t);

  char c=0;
  int position = 0;
  char password[MAX_LENGTH+1] = {0};

  while (position<MAX_LENGTH)
  {
    c = getchar();
    if (c<0x20)
      break;

    password[position++] = c;
    putchar ('*');
  }
  tcsetattr(STDIN_FILENO, TCSANOW, &backup);

  printf("\nPassword is : %s\n", password);
}