本程序可加到用户的源程序之前,起到加锁的作用。本程序的特点是: 口令保密性强(保存于文件KLK.CFG中,此文件名也可由用户重新命名),而 且用户可随时修改口令。在程序中当用户输入口令后,系统首先测试口令文 件KLK.CFG是否存在(只有用户运行了修改口令子函数后才会生成口令文件, 否则系统只认默认口令88888888),若存在则从中取出口令字,否则系统用 默认口令与用户输入的口令进行较验。另外,修改口令子函数changkl(), 可在用户程序中调用,以修改口令文件中的口令字。
本程序涉及到C语言函数getpass(char *),该函数从键盘读取8位字符 并返回,且不在屏幕上显示。我们正好利用这一函数功能进行输入口令。
程序清单如下:
#include #include void main() { char *password; char kl[9]="88888888"; inti=0; FILE *fpl; window(1,1,80,25); /* 屏幕背景清屏成蓝色 */ textbackground(1); clrscr(); window(17,10,58,13);/* 开阴影窗口 */ textbackground(0); clrscr(); for(i=0;i<=2;i++) { window(16,9,56,12); textattr(14︳2<<4); clrscr(); gotoxy(13,2); password=(char *)getpass("请输入系统口令:"); textcolor(4); /* 若口令文件KLK.CFG存在,则从中取出口令字 */ if((fp=fopen("KLK.CFG","rb+"))!=NULL) { fseek(fp,O,SEEK_SET); fgets(kl,9,fp); fclose(fp); } if(i==2&&strcmp(password,kl)!=0) /* 三次口令无效退出 */ { gotoxy(13,2); cputs("口令错误,退出!!"); getch(); exit(0); } if(stcmp(password,kl)!=0) { gotoxy(13,2); cputs("口令错误,重输!!"); getch(); } else break; } /* 进入主程序体 */ textbackground(1); window(1,1,80,25); clrscr(); gotoxy(10,10); cputs("执行用户主体程序……按任意键进行更改口令!"); getch(); changkl();/*用户程序中调用修改口令函数*/ }
changkl() /* 修改口令子函数 */ { char *klk; char buf[1]; FILE *fp; window(17,16,58,19);/* 开阴影窗口 */ textbackground(0); clrscr(); window(16,15,56,18); textattr(14︳4<<4); clrscr(); gotoxy(8,4); cputs("请修改口令字,必须为八位字符"); gotoxy(14,2); klk=(char *)getpass("请输入新口令:"); gotoxy(14,2); textcolor(2); if(srlen(klk)!=8) { cputs("口令字无效,返回!!"); getxh(); return; } cputs("口令修改成功!!"); if((fp=fopen("KLK,CFG"."w"))!=null) /* 保存口令到文件KLK.CFG */ { fputs(klk,fp); buf[0]=0xia; fwrite(&buf[0],1,1,fp); fclose(fp); } getch(); returm; }
|
|