我知道在标准的ANSI C中无法在输入 * 时进行回显。但是是否有一种方法可以在用户在控制台中输入密码时什么都不显示呢?我的意思是像Unix/Linux终端中sudo提示那样。比如,如果你输入命令:sudo cp /etc/somefile ~/somedir
,通常会提示你输入root密码。当你输入密码时,终端不会显示任何内容。在C语言中能否实现这种效果?如果可以,怎么做呢?
我知道在标准的ANSI C中无法在输入 * 时进行回显。但是是否有一种方法可以在用户在控制台中输入密码时什么都不显示呢?我的意思是像Unix/Linux终端中sudo提示那样。比如,如果你输入命令:sudo cp /etc/somefile ~/somedir
,通常会提示你输入root密码。当你输入密码时,终端不会显示任何内容。在C语言中能否实现这种效果?如果可以,怎么做呢?
getnpass()
,这样不需要每个程序员都重新发明轮子... - Calmariusgetpass()
函数可能是你想要的,但如果您感兴趣,这里是实际sudo工具执行此操作的地方。
http://sudo.ws/repos/sudo/file/dc3bf870f91b/src/tgetpass.c#l70
*
。输出技术上被发送到控制台,但它会立即被一个星号覆盖和擦除(通常在该帧甚至未绘制到屏幕之前)。请注意,这不是真正的安全方法,有几个安全漏洞,但对于低技术低安全性应用程序,它可以工作。*这不是 ANSI C(感谢 Billy)示例
您可以使用 _kbhit() 检测按键,然后使用 _getch() 获取值。 这两个函数都不会在屏幕上回显内容。
#include <conio.h> //For keyboard events
#include <stdio.h> //Include this or iostream
#include <locale>
int main()
{
bool bContinue = true;
char szBuffer[255] = {0};
unsigned int nbufIndex = 0;
while (bContinue)
{
if (_kbhit())
{
szBuffer[nbufIndex] = _getch();
if (szBuffer[nbufIndex] == 0xD)
{
bContinue = false;
}
else
{
++nbufIndex;
printf("*");
}
}
}
printf("\n%s\n", szBuffer);
return 0;
}
conio.h
很可能不可用。 - Mike Daniels#include <stdio.h>
#include <conio.h>
void main()
{
char pwd[15];
int i;
printf("Enter Password : ");
for(i=0;i<15;i++)
{
pwd[i]=getch();
if(pwd[i]!='\r')
{
printf("*");
}
if(pwd[i]==13)
break;
}
printf("\n \nPassword is : ");
for(i=0;i<15;i++)
{
printf("%d ",pwd[i]);
}
}
conio.h
在Linux环境中不存在,请参见https://dev59.com/HGoy5IYBdhLWcg3wEKBn。此外,您能否更详细地解释一下您的解决方案? - RobertS supports Monica Cellio