在linux下实现密码输入不回显、回显(不可删)、回显(可退格)

一、在linux下实现密码输入不可见即输入密码时不会产生回显,可用getpass这个函数。
需要的头文件:#include<unistd.h>
使用样例:
int main()

char *eam;
eam = getpass(“请输入密码:\n”);
printf(“密码为:%s\n”,eam);

二、在linux下实现密码输入可见即输入密码时会产生回显(不可删除),操作如下:
需要的头文件:
#include<stdio.h>
#include<termios.h>
#include<unistd.h>

int main()
{
struct termios oldt,newt;
tcgetattr(0,&oldt);
newt = oldt;
newt.c_lflag &= ~(ECHO|ICANON);
char passwd[20] = {0};
char ch;
int i= 0;
printf(“请输入:\n”);
while(1)
{
tcsetattr(0,TCSANOW,&newt);
scanf("%c",&ch);
tcsetattr(0,TCSANOW,&oldt);
if(i = = 20 || ch == ‘\n’)
break;
passwd[i] = ch;
printf("*");
i++;
}
printf("\n输入为:%s\n",passwd_stdin);
return 0;
}
三、在linux下实现密码输入可见即输入密码时会产生回显(可删除/退格回删),操作如下:
需要的头文件:
#include<stdio.h>
#include<termios.h>
#include<unistd.h>

char mygetch()
{
struct termios oldt,newt;
char ch;
tcgetattr(0,&oldt);
newt = oldt;
newt.c_lflag &= ~(ECHO | ICANON);//修改new中的ECHO和ICANON参数,使得new为不回显输入内容
tcsetattr(0,TCSANOW,&newt);//将修改后的new设置为stdin的新的参数,并立即生效
ch = getchar();
tcsetattr(0,TCSANOW,&oldt);//恢复原有终端参数,正常回显
return ch;
}

int getpasswd(char *passwd,int size)
{
int c, n = 0;
do
{
c = mygetch();
if(c != ‘\n’ && c!= ‘\r’ && c!= 127)
{
passwd[n] = c;
printf(" * “);
n++;
}
else if((c != ‘\n’ | c != ‘\r’) && c == 127)//\n:换行;\r:回车;127:backspace
{
if(n > 0)
{
n–;
printf(”\b \b");
}
}
}while(c!= ‘\n’ && c != ‘\r’ && n<(size-1));
passwd[n] = ‘\0’;
return n;
}

int main()
{
char passwdd[20];
printf(“please input key:\n”);
getpasswd(passwdd,sizeof(passwdd));
printf("\nyour key is:%s\n",passwdd);
return 0;
}

以上代码,建议手打一遍,自行验证。
相关函数:
#include<termios.h>
int tcgetattr(int fd,struct termios * termios_p);//获取终端参数
int tcsetattr(int fd,int optional_actions,const struct termios *termios_p);//设置终端参数

借鉴了下文的博客:
原文:
原文:

;

Popular Programs