知道如何在c或c ++中使用此功能
密码= * ** * ****
但最后系统获得正确的密码(意味着实际输入),但其他人看到了这一点。
答案 0 :(得分:3)
要确认用户的密码,请使用pam(official page托管在kernel.org上,因此在撰写时保持不变),特别是pam_authenticate
。
如果您的应用程序有自己的身份验证体系结构(并且大部分时间都不应该),请执行stty -echo
,请求密码,然后执行stty echo
以恢复原始行为。
答案 1 :(得分:2)
您需要告诉终端在输入过程中抑制回声。也许您的操作系统已经提供了从终端读取密码的功能。它可能被称为getpassword
或getpass
或getpasswd
。
请参阅命令stty
以获取终端选项的概述。
答案 2 :(得分:1)
为了在不使用库的情况下实现,你可以使用getch获取按下的字符并打印*来自getch的任何字符并使用任何键进行转义(这里我使用回车)。
示例代码
while(true) {
ch = getch();
if(ch== 13) // ASCII Code for Enter Key
break;
cout<<"*";
}
答案 3 :(得分:0)
关闭回声
http://www.cplusplus.com/forum/general/12256/
窗
#include <windows.h>
void echo( bool on = true )
{
DWORD mode;
HANDLE hConIn = GetStdHandle( STD_INPUT_HANDLE );
GetConsoleMode( hConIn, &mode );
mode = on
? (mode | ENABLE_ECHO_INPUT )
: (mode & ~(ENABLE_ECHO_INPUT));
SetConsoleMode( hConIn, mode );
}
POSIX
#include <termios.h>
#include <unistd.h>
void echo( bool on = true )
{
struct termios settings;
tcgetattr( STDIN_FILENO, &settings );
settings.c_lflag = on
? (settings.c_lflag | ECHO )
: (settings.c_lflag & ~(ECHO));
tcsetattr( STDIN_FILENO, TCSANOW, &settings );
}