如何使用字符覆盖在Windows上屏蔽密码?

时间:2010-03-16 20:59:07

标签: c++ windows command-line passwords

目前我正在使用此实现在密码输入期间隐藏用户输入:

void setEcho(bool enable) {
  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);
}

用户需要能够正面反馈正在进行文本输入。使用C ++在Win32环境中可以使用哪些技术?

1 个答案:

答案 0 :(得分:0)

解决方案是不使用stdio.h,而是使用conio.h。以下程序解决了上述问题。请注意,不再需要禁用回显:

void scanPass(char* passwordEntry, int length) {
  int index, ch;

  for(index = 0; index < (length - 1) && ((ch = _getch()) != EOF)
                                      && (ch != 13); index++) {
    passwordEntry[index] = (char)ch;
    _putch('*');
  }

  passwordEntry[index] = '\0';
}

这种情况下的答案是使用正确的工具来完成工作。 (并且知道正确的工具。)