悬赏100分 如何用c语言 写一个密码程序
用C语言写个简单的6位密码程序初始密码为123456并存在cipher.dat文件中,每输以为一位密码就在屏幕上输出一个*,如果密码错误就进行提示重新输入感谢各位高手解答...
用C语言写个简单的6位密码程序 初始密码为123456并存在cipher.dat文件中,每输以为一位密码就在屏幕上输出一个 * ,如果密码错误 就进行提示 重新输入 感谢各位高手解答
展开
8个回答
展开全部
clude "string.h"
//考虑到用数据库文件保存注册信息的话要使用access创建文件并且还要配置数据源,所以我的方法是采用将注册信息保存到文件
//下面是完整的程序:
//登陆检测函数
int login(char *name,char *password)
{
char info[10000];
char *p=info;
FILE *file=fopen("user","r");
int size;
if(file)
{
size=fread(info,1,10000,file);
while(size!=(int)p-(int)info)
{
if(!strcmp(p,name)&&!strcmp(p+strlen(p)+1,password))
{
fclose(file);
return 1;
}
p+=strlen(p)+1;
p+=strlen(p)+1;
}
}
fclose(file);
return 0;
}
//添加注册信息入文件
void save(char *name,char *password)
{
FILE *file=fopen("user","a");
fwrite(name,1,strlen(name)+1,file);
fwrite(password,1,strlen(password)+1,file);
fclose(file);
}
#define PASSWORD "12345" //这里指定你要允许通过的密码,比如12345,将引号里的数字改为你想要的即可
int main()
{
char password[100];
char name[100],c[100],password1[100];
tag1: printf("press 1 to register, or 2 to login\n");//输入1为注册,输入2为登陆
while(1)
{
gets(c);
if('1'==c[0])
{
printf("please enter your name\n");//输入姓名
gets(name);
tag2: printf("please enter your password\n");//输入密码
gets(password);
printf("please enter your password again\n");
gets(password1);
if(strcmp(password,password1))
{
//两次密码不一致,重输
printf("the password you entered is different from the first one,please try again!\n");
goto tag2;
}
printf("register is completed!\n");//注册成功
//下面实现将注册信息加入文件保存
save(name,password);
goto tag1;
}
else if('2'==c[0])
{
tag3: printf("please enter your name:\n");
gets(name);
printf("please enter your password:\n");
gets(password);
if(login(name,password))//如果验证通过,则
{
printf("login successfully!\n");
//这里添加成功登陆后要执行的代码
}
else
{
printf("your name or password doesn't exist!\n");//否则重输
goto tag3;
}
}
else
{
printf("invalid input!press 1 to register, or 2 to login\n");//输入非法,重输
goto tag1;
}
}
return 0;
}
饿,写了我两个小时啊,大哥,分一定要给我啊~~~~~~
//考虑到用数据库文件保存注册信息的话要使用access创建文件并且还要配置数据源,所以我的方法是采用将注册信息保存到文件
//下面是完整的程序:
//登陆检测函数
int login(char *name,char *password)
{
char info[10000];
char *p=info;
FILE *file=fopen("user","r");
int size;
if(file)
{
size=fread(info,1,10000,file);
while(size!=(int)p-(int)info)
{
if(!strcmp(p,name)&&!strcmp(p+strlen(p)+1,password))
{
fclose(file);
return 1;
}
p+=strlen(p)+1;
p+=strlen(p)+1;
}
}
fclose(file);
return 0;
}
//添加注册信息入文件
void save(char *name,char *password)
{
FILE *file=fopen("user","a");
fwrite(name,1,strlen(name)+1,file);
fwrite(password,1,strlen(password)+1,file);
fclose(file);
}
#define PASSWORD "12345" //这里指定你要允许通过的密码,比如12345,将引号里的数字改为你想要的即可
int main()
{
char password[100];
char name[100],c[100],password1[100];
tag1: printf("press 1 to register, or 2 to login\n");//输入1为注册,输入2为登陆
while(1)
{
gets(c);
if('1'==c[0])
{
printf("please enter your name\n");//输入姓名
gets(name);
tag2: printf("please enter your password\n");//输入密码
gets(password);
printf("please enter your password again\n");
gets(password1);
if(strcmp(password,password1))
{
//两次密码不一致,重输
printf("the password you entered is different from the first one,please try again!\n");
goto tag2;
}
printf("register is completed!\n");//注册成功
//下面实现将注册信息加入文件保存
save(name,password);
goto tag1;
}
else if('2'==c[0])
{
tag3: printf("please enter your name:\n");
gets(name);
printf("please enter your password:\n");
gets(password);
if(login(name,password))//如果验证通过,则
{
printf("login successfully!\n");
//这里添加成功登陆后要执行的代码
}
else
{
printf("your name or password doesn't exist!\n");//否则重输
goto tag3;
}
}
else
{
printf("invalid input!press 1 to register, or 2 to login\n");//输入非法,重输
goto tag1;
}
}
return 0;
}
饿,写了我两个小时啊,大哥,分一定要给我啊~~~~~~
展开全部
/*
用C语言写个简单的6位密码程序 初始密码为123456并存在cipher.dat文件中,
每输以为一位密码就在屏幕上输出一个 * ,
如果密码错误 就进行提示 重新输入
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//密码的最大长度
const int MAX_PASS_LEN = 100;
//保存密码文件的名称
const char PASS_FILE_NAME [] = "cipher.dat";
//密码可以最多输入错误次数
const int MAX_INPUT_PASS_NUM = 5;
int main(int argc, char *argv[])
{
//保存密码的文件的文件指针
FILE * passFile = NULL;
//密码文件中读出的密码
char realPass[MAX_PASS_LEN];
//用户输入的密码
char inputPass[MAX_PASS_LEN];
//指示用户输入密码的字符个数
int inputPassPoint;
//用户输入密码次数计数器,防止暴力破解
int inputPassTimes = 0;
//以读方式打开密码保存文件
passFile = fopen(PASS_FILE_NAME,"r");
//如果打开密码保存文件失败,退出
if(NULL == passFile)
{
printf("打开密码保存文件失败!\n");
exit(0);
}
//从密码保存文件读入密码
fscanf(passFile,"%s",realPass);
//显示从密码文件中读入的密码,
//实际应用中当然要把这行代码注释掉哦!
printf("realPass: %s\n",realPass);
//用户输入密码,超多最多错误次数,或者输入正确的密码都会退出
while(inputPassTimes < MAX_INPUT_PASS_NUM)
{
printf("第 %2d 次输入密码:\n",inputPassTimes+1);
//开始输入前 ,用户输入密码的字符数为 0
inputPassPoint = 0;
//这里用 getche() 读入字符是【重点】,
// getche() 不会显示你输入的字符!
// getche() 不会显示任何信息!
while('\r' != (inputPass[inputPassPoint] = getch()))
{
//虽然 getchar() 不会显示任何信息,
//但是你要让用户知道他【确实成功输入】了一个字符
//因此你可以【显示一个提示字符】,比如"*",来提示用户他输入成功了
printf("*");
//当前用户输入的密码字符加一
inputPassPoint++;
}
//C预言里面一个字符串要求以 '\0' 结尾
//因为我们认为的在刚才【用户的输入的结尾】加一个 '\0'
inputPass[inputPassPoint] = '\0';
//显示用户输入的密码,
//实际应用中当然要把这行代码注释掉哦!
printf("\ninputPass: %s\n",inputPass);
//把保存在密码文件中的真实密码和用户输入的密码进行比较
if(0 == strcmp(realPass,inputPass))
{
printf("the password is right\n");
//保存在文件中的密码和用户输入的密码匹配,跳出
break;
}
//如果能执行到这里,说明用户输入的密码是错误的
//密码输入次数加一
inputPassTimes++;
}
//如果用户输入密码的次数达到最大限制
if(inputPassTimes == MAX_INPUT_PASS_NUM)
{
printf("你密码输入错误次数超过限制!\n");
}
return 0;
}
/*
运行效果:
realPass: 123456
第 1 次输入密码:
*
inputPass: 1
第 2 次输入密码:
**
inputPass: 12
第 3 次输入密码:
***
inputPass: 123
第 4 次输入密码:
****
inputPass: 1234
第 5 次输入密码:
******
inputPass: 123456
the password is right
*/
用C语言写个简单的6位密码程序 初始密码为123456并存在cipher.dat文件中,
每输以为一位密码就在屏幕上输出一个 * ,
如果密码错误 就进行提示 重新输入
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//密码的最大长度
const int MAX_PASS_LEN = 100;
//保存密码文件的名称
const char PASS_FILE_NAME [] = "cipher.dat";
//密码可以最多输入错误次数
const int MAX_INPUT_PASS_NUM = 5;
int main(int argc, char *argv[])
{
//保存密码的文件的文件指针
FILE * passFile = NULL;
//密码文件中读出的密码
char realPass[MAX_PASS_LEN];
//用户输入的密码
char inputPass[MAX_PASS_LEN];
//指示用户输入密码的字符个数
int inputPassPoint;
//用户输入密码次数计数器,防止暴力破解
int inputPassTimes = 0;
//以读方式打开密码保存文件
passFile = fopen(PASS_FILE_NAME,"r");
//如果打开密码保存文件失败,退出
if(NULL == passFile)
{
printf("打开密码保存文件失败!\n");
exit(0);
}
//从密码保存文件读入密码
fscanf(passFile,"%s",realPass);
//显示从密码文件中读入的密码,
//实际应用中当然要把这行代码注释掉哦!
printf("realPass: %s\n",realPass);
//用户输入密码,超多最多错误次数,或者输入正确的密码都会退出
while(inputPassTimes < MAX_INPUT_PASS_NUM)
{
printf("第 %2d 次输入密码:\n",inputPassTimes+1);
//开始输入前 ,用户输入密码的字符数为 0
inputPassPoint = 0;
//这里用 getche() 读入字符是【重点】,
// getche() 不会显示你输入的字符!
// getche() 不会显示任何信息!
while('\r' != (inputPass[inputPassPoint] = getch()))
{
//虽然 getchar() 不会显示任何信息,
//但是你要让用户知道他【确实成功输入】了一个字符
//因此你可以【显示一个提示字符】,比如"*",来提示用户他输入成功了
printf("*");
//当前用户输入的密码字符加一
inputPassPoint++;
}
//C预言里面一个字符串要求以 '\0' 结尾
//因为我们认为的在刚才【用户的输入的结尾】加一个 '\0'
inputPass[inputPassPoint] = '\0';
//显示用户输入的密码,
//实际应用中当然要把这行代码注释掉哦!
printf("\ninputPass: %s\n",inputPass);
//把保存在密码文件中的真实密码和用户输入的密码进行比较
if(0 == strcmp(realPass,inputPass))
{
printf("the password is right\n");
//保存在文件中的密码和用户输入的密码匹配,跳出
break;
}
//如果能执行到这里,说明用户输入的密码是错误的
//密码输入次数加一
inputPassTimes++;
}
//如果用户输入密码的次数达到最大限制
if(inputPassTimes == MAX_INPUT_PASS_NUM)
{
printf("你密码输入错误次数超过限制!\n");
}
return 0;
}
/*
运行效果:
realPass: 123456
第 1 次输入密码:
*
inputPass: 1
第 2 次输入密码:
**
inputPass: 12
第 3 次输入密码:
***
inputPass: 123
第 4 次输入密码:
****
inputPass: 1234
第 5 次输入密码:
******
inputPass: 123456
the password is right
*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
文件操作很简单,相信你肯定会。
至于你要的那个不显示的问题,我觉得用标准C的
函数是不能实现的,因为C的输入输出都是有缓冲的
只有在按下回车或者空格时起作用,而用户输入密码
时中间一般不会有回车或空格。如果想自己实现这种
效果,必然要用到多线程,一个线程读取的同时,另
一个线程覆盖,以前看到java就是这样做的。但是多
线程也不是标准C的东西了。其实linux的系统调用里
有一个让密码不显示的函数getpass,用起来很简单,
你可以参考下。
#include<stdio.h>
#include<unistd.h>
int main(void)
{
char *keyptr;
keyptr = getpass("input the passwd :");
printf("your passwd is : %s\n", keyptr);
return 0;
}
至于你要的那个不显示的问题,我觉得用标准C的
函数是不能实现的,因为C的输入输出都是有缓冲的
只有在按下回车或者空格时起作用,而用户输入密码
时中间一般不会有回车或空格。如果想自己实现这种
效果,必然要用到多线程,一个线程读取的同时,另
一个线程覆盖,以前看到java就是这样做的。但是多
线程也不是标准C的东西了。其实linux的系统调用里
有一个让密码不显示的函数getpass,用起来很简单,
你可以参考下。
#include<stdio.h>
#include<unistd.h>
int main(void)
{
char *keyptr;
keyptr = getpass("input the passwd :");
printf("your passwd is : %s\n", keyptr);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <conio.h>
int main()
{
int i;
char ch;
FILE *fp;
char password[100],str[100];
fp=fopen("cipher.dat","r");
if (fp==NULL)
{
printf("File Error\nPress any key to exit:");
getch();
exit(-1);
}
fgets(password,80,fp);
fclose(fp);
printf("key=%s\n",password);
while (1)
{
printf("Input password:");
i=0;
while (1)
{
ch=getch();
if (ch==13)
{
printf("\n");
break;
}
else if (ch==8)
i--;
else
{
printf("*");
str[i++]=ch;
}
}
str[i]=0;
/*输入的密码*/
/*printf("str=%s\n",str);*/
if (strcmp(password,str)==0) /*密码匹配*/
break;
else
{
printf("password error:\n");
}
}
printf("password correct:%s\n",password);
printf("Press any key to exit:");
getch();
}
#include <conio.h>
int main()
{
int i;
char ch;
FILE *fp;
char password[100],str[100];
fp=fopen("cipher.dat","r");
if (fp==NULL)
{
printf("File Error\nPress any key to exit:");
getch();
exit(-1);
}
fgets(password,80,fp);
fclose(fp);
printf("key=%s\n",password);
while (1)
{
printf("Input password:");
i=0;
while (1)
{
ch=getch();
if (ch==13)
{
printf("\n");
break;
}
else if (ch==8)
i--;
else
{
printf("*");
str[i++]=ch;
}
}
str[i]=0;
/*输入的密码*/
/*printf("str=%s\n",str);*/
if (strcmp(password,str)==0) /*密码匹配*/
break;
else
{
printf("password error:\n");
}
}
printf("password correct:%s\n",password);
printf("Press any key to exit:");
getch();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不显示密码c语言无法实现,这个太简单了,昨天我刚写了一个加密程序,就是把从键盘输入的句子什么的保存到文件中,但是保存成了乱码,就算给你这个文件你也不知道写的啥,只有通过程序才能打开查看它,哈哈,好玩吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询