我知道,在input标准ANSI C的时候不可能回显*。但是有一种方法可以在控制台input密码的同时显示任何内容。 我的意思是像Unix / Linuxterminal中的sudo提示符。 就像input以下命令一样: sudo cp /etc/somefile ~/somedir 。 通常会提示您inputroot密码。 当你input时,terminal什么都不显示。 这个效果可能在C吗? 如果是,怎么样?
Windows无人参与安装 – Unattended.xml AdministratorPasswordencryption/哈希
如何在Windows中使用Python修改密码到期?
你如何pipe理服务器的根密码
Active Directory如何模拟用户login并更改密码
你正在寻找的功能是: getpass() 。 但是,您会注意到它被标记为“LEGACY”。 尽管它不会去任何地方,但是函数不允许指定输入缓冲区的大小,这使得它不是一个很好的接口。 正如Jefromi所指出的那样,glibc手册提供了便携式的示例代码,用于从头开始实现getpass ,允许任意输入大小(而不是LEGACY)。
sudo是用C写的,所以是的:)。 Safyan 提到的getpass()函数可能是你想要的,但是如果你感兴趣的话,下面是sudo工具的实际使用方法:
http://sudo.ws/repos/sudo/file/dc3bf870f91b/src/tgetpass.c#l70
*这不是ANSI C(谢谢比利)样本
您可以使用_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%sn",szBuffer); return 0; }
穷人这样做的方法是逐字读取用户输入,并且在接收到每个字符后打印退格字符,然后打印* 。 输出在技术上被发送到控制台,但是它被立即擦除并被星号覆盖(通常在该帧甚至被绘制到屏幕之前)。 请注意,这不是一个真正安全的方法,有几个安全漏洞,但对于低技术的低安全性应用程序,它的工作原理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。