在linux/Unix命令行下执行一个程序,将输入以*号回显出来,类似于登录时输入密码以*代替。
(Windows下很好实现,可以结合使用getch()和putchar(),但是getch()不是标准C函数,linux/Unix下没有,需要写一个函数实现getch()),好了直接上代码
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include "Base64.c" //Base64编码程序
int getch(void);
main()
{
char str1[20],str2[60];
char ch;
int i=0;
printf("Please enter your password: ");
while((ch=getch())!=13 ) //按回车键退出
{
str1[i++]=ch;
putchar('*');
}
str1[i]='\0';
printf("\n Your input is: %s\n",str1);
strcpy(str2,base64_encode(base64_encode(str1)));
printf("Encoding string is: %s\n",str2);
}
//参考http://blog.youkuaiyun.com/liuchao35758600/article/details/6419499
int getch(void)
{
struct termios tm, tm_old;
int fd = STDIN_FILENO, c;
if(tcgetattr(fd, &tm) < 0)
return -1;
tm_old = tm;
cfmakeraw(&tm);
if(tcsetattr(fd, TCSANOW, &tm) < 0)
return -1;
c = fgetc(stdin);
if(tcsetattr(fd, TCSANOW, &tm_old) < 0)
return -1;
if(c == 3) exit(1); //按Ctrl+C结束退出
return c;
}
有兴趣可以研究下Unix下的一个头文件
curses.h,贴一个网站大家看下
更正下:改方法只能实现Linux下的星号显示,对于Unix会有点问题!谢谢
本文介绍了一种在Linux环境下实现密码输入时以星号(*)显示的方法,通过自定义getch()函数捕捉键盘输入,并使用Base64进行二次编码演示。
1992

被折叠的 条评论
为什么被折叠?



