#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<windows.h>
char password1[20],password2[20],way2[20];
void BUILD_D() //D盘建立文件
{
FILE *fp;
char name[20],text[1000000];
char way[20] = "d:\";//设置路径为d盘
printf("请输入文件名称:\n");
scanf("%s",name);
strcat(name,".txt");//给文件名加上后缀
strcat(way,name);//添加路径
strcpy(way2,way);
fp = fopen(way,"w");
printf("请输入内容:\n");
while(1)
{
gets(text);
if(!strcmp(text,"##"))
break;
else
{
fputs(text,fp);
fputs("\n",fp); //用于转行
}
}
fclose(fp);
}
void BUILD_E() //E盘建立文件
{
FILE *fp;
char name[20],text[1000000];
char way[20] = "e:\";//设置路径为d盘
printf("请输入文件名称:\n");
scanf("%s",name);
strcat(name,".txt");//给文件名加上后缀
strcat(way,name);//添加路径
strcpy(way2,way);
fp = fopen(way,"w");
printf("请输入内容:\n");
while(1)
{
gets(text);
if(!strcmp(text,"##"))
break;
else
{
fputs(text,fp);
fputs("\n",fp); //用于转行
}
}
fclose(fp);
}
void password_check() //密码判断程序
{
int i,num,letters,all,a; //a用于序号选择
L: i = 0,num = 0,letters = 0,all = 0,a = 0;
scanf("%s",password1);
while (password1[0]>= '0' && password1[0]<='9') //判断第一位是否为字母,不是则重新输入密码
{
printf("首字母必须是字母!\n");
printf("请重新输入密码!");
scanf("%s",password1);
}
while(password1[i] != '\0')
{
if (password1[i]>= '0' && password1[i]<='9') //统计数字数量
{
num++;
}
else if(password1[i]>='a'&&password1[i]<='z'||password1[i]>='A'&&password1[i]<='Z') //统计字母数量
{
letters++;
}
i++;
}
all = num + letters;
printf("数字个数%d,字母个数%d,总密码长度%d\n",num,letters,all);
if(all<6) //判断密码长度
{
printf("密码长度必须不小于六位!\n");
printf("请重新输入密码!\n");
goto L;
}
else if (num<3 && letters>2) //判断数字数量是否大于2
{
printf("数字个数必须大于2!\n");
printf("请重新输入密码!\n");
goto L;
}
else if (letters<3 && num>2) //判断字母数量是否大于2
{
printf("字母个数必须大于2!\n");
printf("请重新输入密码!\n");
goto L;
}
else if(num<3 && letters<3) //判断字母和数字数量是否均大于2
{
printf("字母和数字个数均必须大于2!\n");
printf("请重新输入密码!\n");
goto L;
}
M:printf("请确认你的密码!\n");
scanf("%s",password2);
if(strcmp(password1,password2) == 0)
{
printf("密码设置成功!\n");
}
else
{
printf("两次密码不一致!\n");
N: printf("请输入序号选择要执行的操作!\n");
printf("1.重新输入密码\n2.重新确认密码\n");
scanf("%d",&a);
if(a == 1)
{
printf("请输入密码\n");
goto L;
}
else if(a == 2)
{
goto M;
}
else
{
printf("请输入正确的序号!\n");
goto N;
}
}
}
void JM_D() // 对D盘解密
{
char name[20],key[20];
char way[20] = "d:\";//设置路径为d盘
printf("请输入文件名称:\n");//解密步骤。
scanf("%s",name);
strcat(name,".txt");//给文件名加上后缀
strcat(way,name);//添加路径
FILE *fp4;
fp4 = fopen(way,"r");
int i=0,j;
char yw[1000],mw[50]; //yw为文档的内容,mw是解密后的数据
while((yw[i]=fgetc(fp4))!=EOF)
i++;
yw[i]='\0';
fclose(fp4);
printf("输入你的密码:\n");
scanf("%s",key);
for(i=0;i<strlen(yw);i++)
{
for( j = 0;j<strlen(key);j++)
{
if(!(yw[i]& 0x80))
{
mw[i]=yw[i]^key[j];
}
else
{
mw[i]=yw[i];
}
}
j = 0;
}
printf("\n解密密文:\n");puts(mw);
}
void JM_E() // 对E盘解密
{
char name[20],key[20];
char way[20] = "e:\";//设置路径为e盘
printf("请输入文件名称:\n");//解密步
scanf("%s",name);
strcat(name,".txt");//给文件名加上后缀
strcat(way,name);//添加路径
FILE *fp4;
fp4 = fopen(way,"r");
int i=0,j;
char yw[1000],mw[50]; //yw为文档的内容,mw是解密后的数据
while((yw[i]=fgetc(fp4))!=EOF)
i++;
yw[i]='\0';
fclose(fp4);
printf("输入你的密码:\n");
scanf("%s",key);
for(i=0;i<strlen(yw);i++)
{
for( j = 0;j<strlen(key);j++)
{
if(!(yw[i]& 0x80))
{
mw[i]=yw[i]^key[j];
}
else
{
mw[i]=yw[i];
}
}
j = 0;
}
printf("\n解密密文:\n");puts(mw);
}
main()
{
while(1)
{
system("color 04");
system("cls");//清屏
N: int a=0,b = 0,c = 0; //a为存储序号,b为解密序号
//此处应有加密与解密选择,未完成
printf("请选择你的功能\n");
printf("1.创建加密文件 2.解密文件 3.退出程序\n");
scanf("%d",&c);
if(c == 1)
{
printf("选择存储空间(对应序号):1.D盘;2.E盘\n");
scanf("%d",&a);
while (a!=1&&a!=2)
{
printf("请重新输入正确的序号!\n");
scanf("%d",&a);
}
switch(a) //存储盘选择系统
{
case 1:BUILD_D();
break;
case 2 :BUILD_E();
break;
}
FILE *p; //读取创立的文档
p=fopen(way2,"r");
int i=0,j;
char yw[1000],mw[50]; //yw为文档的内容,mw是加密后的数据
while((yw[i]=fgetc(p))!=EOF)
i++;
yw[i]='\0';
fclose(p);
printf("请创建你的密码:\n");
password_check(); //执行密码判断程序
printf("请牢记你的密码:\n%s\n",password2);
printf("原文:\n");puts(yw); //输出读取的数据
for(i=0;i<strlen(yw);i++)
{
for( j = 0;j<strlen(password2);j++)
{
if(!(yw[i]& 0x80)&&yw[i]!=3)
{
mw[i]=yw[i]^password2[j];
}
else
{
mw[i]=yw[i];
}
}
j = 0;
}
printf("\n密文:\n");puts(mw); //输出密文,确保加密成功
FILE *fp3 ; //将密文覆盖写入
fp3 = fopen(way2,"w");
fputs(mw,fp3);
fclose(fp3);
printf("\n加密完成!\n");
}
else if(c == 2)
{printf("选择解密盘\n"); //选择解密盘
printf("1.D盘 2.E盘\n");
scanf("%d",&b);
while (b!=1&&b!=2)
{
printf("请重新输入正确的序号!\n");
scanf("%d",&b);
}
switch(b) //解密盘选择系统
{
case 1:JM_D();
break;
case 2 :JM_E();
break;
}
}
else if(c == 3)
{
system("taskkill -f -im 课设修改.exe");
break;
}
else
{
printf("请输入正确的序号!\n");
goto N;
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);//字体颜色
printf("5秒后返回主菜单!\n");
Sleep(5000);
}
}