Linux与Windows下实现密码隐藏输入方法

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 下实现输入变为"*"号: 

#include <stdio.h>
 
int inputpw (char *password,int len); /*len为密码的最长长度*/
 
main (void)
{ int l;
 char pw[13];
 l=inputpw(pw,12);
 printf("/n刚才输入%d位的密码:%s",l,pw);
 return 0;
}
 
int inputpw(char *password,int len) 
{
 int i=0; /*密码数组索引值,同时也表示记录已显示星的数目,初始化值为0*/
 char ch;
 printf("/n请输入密码(长度小于等于%d位): ",len);
 fflush(stdin); /*清洗流,以防妨碍密码正确输入*/
 for ( ch = getch(); ch!=13;ch = getch() ) /*若用户输入回车则结束密码输入*/ 
 {
 if (i>=len) continue; /*如果已到达len指定的长度则……*/
 
 if ( ch == 8 ) /*若用户按了退格键则……*/
 {
 if ( i > 0 ) /*如果已显示星数不为0则……*/
 {
 printf("/b"); /*退一个格*/
 password[--i]='/0'; /*password[i-1]的值改为'/0', 已显示星数减一,数组索引值减一*/
 }
 putchar(0); /*显示空字符*/
 printf("/b"); /*退一个格*/
 continue ;
 }
 
 if( ch<32 || ch>127 ) continue; /*密码只能为ASCII码值为32-127的字符*/
 
 printf("*"); /*上述情况都不是则显示一个星*/
 password[i++]=ch; /*将ch赋给password[i],已显示星数加一,数组索引值加一*/ 
 }
 password[i] = '/0'; /*设置结尾的空字符*/
 return i;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值