免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 请求帮助
打印 上一主题 下一主题

再问密码是如何实现的? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-07-13 20:52 |只看该作者

再问密码是如何实现的?

本来,这个问题是我昨天问的,今天上午我受到curses库中的getche()函数的启发,用curses函数写了一个小程序,基本上实现的我的要求,现在我贴出的写的代码,请各位大侠们指正:

#include <stdio.h>;
#include <curses.h>;
main(int argc,char **argv)
{
  WINDOW *scrwin;
  char vtmp[10];
  char vpass[40];
  char vchar;
  int i,k,y;
  
  vtmp[0]=0;
  
  initscr();           /* 初始屏幕 */
  noecho();

  strcpy(vpass,"请输入口令:";
  scrwin=newwin(0,0,0,0);
  box(scrwin,0,0);
  refresh();
  wrefresh(scrwin);

  y=0;
  for (;{

      mvwaddstr(scrwin,8,2,vpass);
      wrefresh(scrwin);
      if (y >; 2){
         mvwaddstr(scrwin,20,1,"你是非法使用者,请退出!!!!";
         wrefresh(scrwin);
         break;
      }

      i=0;
      k=strlen(vpass)+2;
      while (i !=6){

         vchar=getch();
         if (vchar=='\010'){       /* 处理BACKSPACE键 */

            if (i==0) continue;

            if (i >; 0){
               k=k-1;
               wmove(scrwin,8,k);
               waddch(scrwin,' ');
               wmove(scrwin,8,k);
               wrefresh(scrwin);
               i--;
               continue;
            }
         }
         mvwaddch(scrwin,8,k,'*');
         wrefresh(scrwin);
         vtmp=vchar;
         if (vchar !='\010') i++;
         k++;
     }
     vtmp[6]=0;

    if (strcmp(vtmp,"passwd"==0){
       mvwaddstr(scrwin,20,1,"口令正确,登录成功!!!!!";
       wrefresh(scrwin);
       break;
    }else{
       mvwaddstr(scrwin,20,1,"口令错误,请重新输入!!!!!";
       wmove(scrwin,8,(strlen(vpass)+2));
       waddstr(scrwin,"          ";
       refresh();
       wrefresh(scrwin);
       y++;
       continue;
    }
  }
  endwin();
  sleep(1);
  system("clear";
  return 0;
}

论坛徽章:
0
12 [报告]
发表于 2004-07-13 20:56 |只看该作者

再问密码是如何实现的?

如果大家们有更好的、更简洁的程序,请贴出来共享,也能为我们菜鸟加一份兴趣。

    谢!!!

论坛徽章:
0
13 [报告]
发表于 2004-07-13 23:19 |只看该作者

再问密码是如何实现的?

用 getpass 即可。

论坛徽章:
0
14 [报告]
发表于 2004-07-14 07:50 |只看该作者

再问密码是如何实现的?

能贴出代码来吗?

论坛徽章:
0
15 [报告]
发表于 2004-07-14 19:12 |只看该作者

再问密码是如何实现的?

这是一个输入6位密码的程序。之前我不知道c函数库里面到底有没有这个程序。于是自己编了一个。用的是turboc2 编译的哈。
#include<stdio.h>;
char *xinhao(char *p);
main()
{
  char  *p="000000";
  printf("Enter the password:"
  p=xinhao(p);
}
char *xinhao(char *p)  
{
        char *a="000000";
        a=p;
   for(;*p;p++)
        { *p=getch();   /*getch() 的作用是输入的字符不显

示在屏幕上*/
           printf("*";
         }
   return a;
}

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2004-07-14 19:17 |只看该作者

再问密码是如何实现的?

其实完全没有必要回显。
回显反而会让别人知道用户的密码的信息
比如密码是几个字符啊、哪几个字符是连在一起输入的啊,等等。

我还记得好象有的软件的密码回显是胡乱显示的,
你按一个键,它会出来好几个星号。

论坛徽章:
0
17 [报告]
发表于 2004-07-14 19:17 |只看该作者

再问密码是如何实现的?

上面的密码其实是一个字符串。。不知道符合密码的要求不哦 。

论坛徽章:
0
18 [报告]
发表于 2004-07-14 19:26 |只看该作者

再问密码是如何实现的?

原帖由 "flw" 发表:
其实完全没有必要回显。
回显反而会让别人知道用户的密码的信息
比如密码是几个字符啊、哪几个字符是连在一起输入的啊,等等。

我还记得好象有的软件的密码回显是胡乱显示的,
你按一个键,它会出来好几个星号..........



恩  说的 很对。。至少可以知道密码有好多位。其实不要星号还更安全。。
printf("*“)这排代码去掉就是了哈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP