我知道当你输入标准的ANSI C时,回显*是不可能的。但是,当有人在控制台中输入密码时,有没有办法什么也不显示呢?我的意思是,就像Unix/Linux终端中的sudo提示符。例如,如果您键入命令:sudo cp /etc/somefile ~/somedir。系统通常会提示您输入root密码。当你输入的时候,终端什么也不显示。这种效果在C中是可能的吗?如果是,是如何实现的?
发布于 2010-04-14 08:58:21
您要查找的函数是:getpass()。不过,您会注意到它被标记为“遗留”。尽管它不会去任何地方,但该函数不允许指定输入缓冲区的大小,这使得它不是一个很好的接口。正如Jefromi所指出的,glibc手册以一种允许任意输入大小的方式提供了portable example code for implementing getpass from scratch (并且不是遗留的)。
发布于 2010-04-14 09:04:35
sudo是用C编写的,所以是的:)。您可能需要使用getpass()函数Safyan mentioned,但如果您感兴趣,这里是实际的sudo工具实现它的位置:
http://sudo.ws/repos/sudo/file/dc3bf870f91b/src/tgetpass.c#l70
发布于 2010-04-14 09:31:50
穷人的方法是逐个字符地读取用户输入的字符,并在接收到每个字符后打印出一个退格字符,后跟*。从技术上讲,输出被发送到控制台,但它会立即被一个星号擦除和覆盖(通常在该帧被绘制到屏幕上之前)。请注意,这并不是一种真正的安全方法,并且有几个安全漏洞,但对于低技术、低安全性的应用程序,它是有效的。
https://stackoverflow.com/questions/2634203
复制相似问题