社区
Linux/Unix社区
帖子详情
请教linux下如何不回显输入密码?
prhanxben
2011-03-22 11:48:48
如题,登录linux的时候密码都是不显示的.
虽然有种方法是改变终端属性来不回显密码,但使用中存在问题.
我想系统api应该提供了类似方法让终端不回显输入密码吧?
不知linux/unix 上有没有成熟的办法来处理密码输入.
...全文
247
5
打赏
收藏
请教linux下如何不回显输入密码?
如题,登录linux的时候密码都是不显示的. 虽然有种方法是改变终端属性来不回显密码,但使用中存在问题. 我想系统api应该提供了类似方法让终端不回显输入密码吧? 不知linux/unix 上有没有成熟的办法来处理密码输入.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
李亚超
2011-03-22
打赏
举报
回复
没有现成的
prhanxben
2011-03-22
打赏
举报
回复
感谢1楼,再问一个问题,请问如何在密码输入时处理控制字符?
我以为至少要处理一个BackSpace 让用户可以回退错误输入。
但我怎么能在输入中确认是BackSpace 呢? 改终端属性以后,getchar得到的ASCII码不是BS的8,而是127
无知者无谓
2011-03-22
打赏
举报
回复
在很多情况下,我们希望在控制台下,按键盘字符,程序马上反应而不是等待回车后才响应。
在Windows平台下可以使用getch ()(要求#include “conio.h“)实现,
而在Linux平台下没有这个头文件,也就无法使用这个函数。
车到山前必有路,我们另有办法。
先看下面这段代码:
struct termios stored_settings;
struct termios new_settings;
tcgetattr (0, &stored_settings);
new_settings = stored_settings;
new_settings.c_lflag &= (~ICANON);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr (0, TCSANOW, &new_settings);
termios结构的描述了终端的模式,在这段代码中我们改变了它,使得终端能够接收到键盘输入马上返回。所以就能够使用一般的读取字符函数getchar ()来获得输入字符。
在退出你的程序时,要记得把终端环境改回来:
tcsetattr (0, TCSANOW, &stored_settings);
这几个函数以及结构要求包含头文件termios.h和stdio.h。
下面是一个测试文件,可以在Windows和Linux操作系统下,编译运行:
#include "stdio.h"
#include "stdlib.h"
#ifdef _WIN32 //Win32 platform
#include "conio.h"
#define get_char getch
#else
#include "termios.h"
#define get_char getchar
#endif
int main (int argc, char* argv[])
{
#ifdef _WIN32
//Do nothing
#else
struct termios stored_settings;
struct termios new_settings;
tcgetattr (0, &stored_settings);
new_settings = stored_settings;
new_settings.c_lflag &= (~ICANON);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr (0, TCSANOW, &new_settings);
#endif
while (1) {
char c = get_char ();
if ('q' == c || 'Q' == c)
break;
printf ("You input: %c\n", c);
}
#ifdef _WIN32
//Do nothing
#else
tcsetattr (0, TCSANOW, &stored_settings);
#endif
return 0;
}
要提的一点是,getch ()是没有回显的,而getchar ()是有回显的,所以在Windows和Linux下的运行有点不同。
zxt6405
2011-03-22
打赏
举报
回复
LZ是要在自己的程序中实现密码的不显示么?
如果这样的话,你可以用ncurses库,这个库可以很成熟地处理字符界面的这些处理。
它有一对函数echo()和noecho()可以设置输入的回显。
应用到密码上就可以实现密码输入的不回显。
另外,LZ你要的对于backspace的处理,ncurses也做到了。
ncurses还有一对函数cbreak()和nocbreak(),可以设置输入的模式。在cbreak模式下,ncurses可以用getch()函数实现终端输入的处理,其中包括了对于backspace的识别。
ncurses处理各种字符终端的输入输出是一个挺成熟的库了,推荐LZ你试一试。
无知者无谓
2011-03-22
打赏
举报
回复
[Quote=引用 2 楼 prhanxben 的回复:]
感谢1楼,再问一个问题,请问如何在密码输入时处理控制字符?
我以为至少要处理一个BackSpace 让用户可以回退错误输入。
但我怎么能在输入中确认是BackSpace 呢? 改终端属性以后,getchar得到的ASCII码不是BS的8,而是127
[/Quote]
这是好多年前的代码,我自己也记不清了,你可以man tcsetattr 看看,有一些关于控制键的设定。
linux
下退格键的小研究(续)
上次出现的backspace在
输入
的时候显示^H的问题,
请教
了一下组里的老司机,老司机说,这是
回显
的问题,要把那个echo什么的修改一下,顺着这条思路,查了点资料,上面一篇博客就是其中之一。 废话少说,直接放码: ...
Linux
常用命令(一)
Linux
下如何从普通用户切换到root用户 菜鸟提问,
请教
sudo su和sudo -i的区别。
Linux
用户权限的切换 pwd : 查看当前用户目录(在哪个文件夹下) zq@zq:~$:第一个zq表示当前用户,第二个zq表示主机名,~指当前...
ubuntu修改root
密码
Ubuntu安装后root是没有默认的
密码
的,因为你还没给root设置
密码
,你第一个 user 是在 ... 端口
输入
如下命令:sudo passwd root[sudo] password for you :
输入
你的
密码
,不
回显
Enter new UNIX password: 设置root 密
干货|2020渗透测试面试问题大全 建议收藏
转自HACK之道 乌雲安全 渗透篇 0.渗透测试知识体系结构 1、介绍一下自认为有趣的挖洞经历 挖洞也有分很多种类型,一种是以渗透、一种是以找漏洞为主,如果是前者会想各种办法获取...SQL注入、
密码
组合,前者防护分为
linux
安全大全
第一章
linux
安全问题概述 粘着位(Sticky bit) 如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所 ...但是该目录下的目录不继承该权限,要再设置 才可使用。 # chmod ...
Linux/Unix社区
23,116
社区成员
74,506
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章