Linux与Windows下实现密码隐藏输入方法
2006-12-03 12:43
776 查看
Linux 下实现:
#include "termios.h"
struct termios new_t, old_t;
tcgetattr(0, &old_t);
new_t = old_t;
new_t.c_lflag &= (~ICANON);
new_t.c_lflag &= (~ECHO);
new_t.c_cc[VTIME] = 0;
new_t.c_cc[VMIN] = 1;
tcsetattr(0, TCSANOW, &new_t);
tcsetattr(0, TCSANOW, &old_t);
TC 下实现输入变为"*"号:
[align=left]#include <stdio.h> [/align]
[align=left] [/align]
[align=left]int inputpw (char *password,int len); /*len为密码的最长长度*/ [/align]
[align=left] [/align]
[align=left]main (void) [/align]
[align=left]{ int l; [/align]
[align=left] char pw[13]; [/align]
[align=left] l=inputpw(pw,12); [/align]
[align=left] printf("/n刚才输入%d位的密码:%s",l,pw); [/align]
[align=left] return 0; [/align]
[align=left]} [/align]
[align=left] [/align]
[align=left]int inputpw(char *password,int len) [/align]
[align=left]{ [/align]
[align=left] int i=0; /*密码数组索引值,同时也表示记录已显示星的数目,初始化值为0*/ [/align]
[align=left] char ch; [/align]
[align=left] printf("/n请输入密码(长度小于等于%d位): ",len); [/align]
[align=left] fflush(stdin); /*清洗流,以防妨碍密码正确输入*/ [/align]
[align=left] for ( ch = getch(); ch!=13;ch = getch() ) /*若用户输入回车则结束密码输入*/ [/align]
[align=left] { [/align]
[align=left] if (i>=len) continue; /*如果已到达len指定的长度则……*/ [/align]
[align=left] [/align]
[align=left] if ( ch == 8 ) /*若用户按了退格键则……*/ [/align]
[align=left] { [/align]
[align=left] if ( i > 0 ) /*如果已显示星数不为0则……*/ [/align]
[align=left] { [/align]
[align=left] printf("/b"); /*退一个格*/ [/align]
[align=left] password[--i]='/0'; /*password[i-1]的值改为'/0', 已显示星数减一,数组索引值减一*/ [/align]
[align=left] } [/align]
[align=left] putchar(0); /*显示空字符*/ [/align]
[align=left] printf("/b"); /*退一个格*/ [/align]
[align=left] continue ; [/align]
[align=left] } [/align]
[align=left] [/align]
[align=left] if( ch<32 || ch>127 ) continue; /*密码只能为ASCII码值为32-127的字符*/ [/align]
[align=left] [/align]
[align=left] printf("*"); /*上述情况都不是则显示一个星*/ [/align]
[align=left] password[i++]=ch; /*将ch赋给password[i],已显示星数加一,数组索引值加一*/ [/align]
[align=left] } [/align]
[align=left] password[i] = '/0'; /*设置结尾的空字符*/ [/align]
[align=left] return i; [/align]
#include "termios.h"
struct termios new_t, old_t;
tcgetattr(0, &old_t);
new_t = old_t;
new_t.c_lflag &= (~ICANON);
new_t.c_lflag &= (~ECHO);
new_t.c_cc[VTIME] = 0;
new_t.c_cc[VMIN] = 1;
tcsetattr(0, TCSANOW, &new_t);
tcsetattr(0, TCSANOW, &old_t);
TC 下实现输入变为"*"号:
[align=left]#include <stdio.h> [/align]
[align=left] [/align]
[align=left]int inputpw (char *password,int len); /*len为密码的最长长度*/ [/align]
[align=left] [/align]
[align=left]main (void) [/align]
[align=left]{ int l; [/align]
[align=left] char pw[13]; [/align]
[align=left] l=inputpw(pw,12); [/align]
[align=left] printf("/n刚才输入%d位的密码:%s",l,pw); [/align]
[align=left] return 0; [/align]
[align=left]} [/align]
[align=left] [/align]
[align=left]int inputpw(char *password,int len) [/align]
[align=left]{ [/align]
[align=left] int i=0; /*密码数组索引值,同时也表示记录已显示星的数目,初始化值为0*/ [/align]
[align=left] char ch; [/align]
[align=left] printf("/n请输入密码(长度小于等于%d位): ",len); [/align]
[align=left] fflush(stdin); /*清洗流,以防妨碍密码正确输入*/ [/align]
[align=left] for ( ch = getch(); ch!=13;ch = getch() ) /*若用户输入回车则结束密码输入*/ [/align]
[align=left] { [/align]
[align=left] if (i>=len) continue; /*如果已到达len指定的长度则……*/ [/align]
[align=left] [/align]
[align=left] if ( ch == 8 ) /*若用户按了退格键则……*/ [/align]
[align=left] { [/align]
[align=left] if ( i > 0 ) /*如果已显示星数不为0则……*/ [/align]
[align=left] { [/align]
[align=left] printf("/b"); /*退一个格*/ [/align]
[align=left] password[--i]='/0'; /*password[i-1]的值改为'/0', 已显示星数减一,数组索引值减一*/ [/align]
[align=left] } [/align]
[align=left] putchar(0); /*显示空字符*/ [/align]
[align=left] printf("/b"); /*退一个格*/ [/align]
[align=left] continue ; [/align]
[align=left] } [/align]
[align=left] [/align]
[align=left] if( ch<32 || ch>127 ) continue; /*密码只能为ASCII码值为32-127的字符*/ [/align]
[align=left] [/align]
[align=left] printf("*"); /*上述情况都不是则显示一个星*/ [/align]
[align=left] password[i++]=ch; /*将ch赋给password[i],已显示星数加一,数组索引值加一*/ [/align]
[align=left] } [/align]
[align=left] password[i] = '/0'; /*设置结尾的空字符*/ [/align]
[align=left] return i; [/align]
相关文章推荐
- Windows使用SSH Secure Shell实现免密码登录Linux的方法以及使用scp2命令免密码下载文件
- linux在终端输入密码时显示星号的实现方法
- 用rsync 命令实现linux 跨服务器差分备份,不需要输入密码
- 利用管道实现sudo命令免输入密码的方法
- Linux/Ubuntu sudo不用输入密码的方法
- windows、linux下java连接本地MQ队列实现输入(二)
- Android中实现EditText密码显示隐藏的方法
- Java密码屏蔽输入的实现方法
- C#实现在控制台输入密码显示星号的方法
- 使用expect实现ssh自动输入密码,从而自动登陆Linux
- linux脚本实现scp命令自动输入密码和yes/no等确认信息
- windows 与 linux 之间的文件夹的共享(samba实现方法)
- 跨平台的目录遍历实现方法(windows和linux已经测试)
- Linux/Ubuntu sudo不用输入密码的方法
- linux、mac上用expect脚本实现脚本自动输入密码
- 用rsync实现windows与linux文件同步的方法
- 几种方法来实现scp拷贝时无需输入密码
- Linux/Ubuntu sudo不用输入密码的方法
- 几种方法来实现scp拷贝时无需输入密码
- [转]Linux/Ubuntu sudo不用输入密码的方法