c语言文件加密课设 可生成文件
核心代码就一行 c=c^code[i];
#include#include #include #define M 30 void create(void); void encrypt(void); void decrypt(void); int proceed(); char address[100]; char code[M]; char code1[M]; int main() { int k=1,choice=0; char m; while(1) { system("color 9"); system("cls"); printf(" ****************************************************n"); printf(" ** 欢迎使用文件加密系统! **n"); printf(" ** 请输入您的选择 **n"); printf(" ** 1.输入内容 2.加密文件 **n"); printf(" ** 3.解密文件 4.退出系统 **n"); printf(" ** (请输入1-4) **n"); printf(" ****************************************************n"); printf("nn----------------------------------------------------------n"); m=getchar(); while(m!='1' && m != '2' && m !='3' && m!='4') { getchar(); printf("输入选择有误!请重新输入:"); m=getchar(); } if(m=='1')choice=1; if(m=='2')choice=2; if(m=='3')choice=3; if(m=='4')choice=4; switch (choice) { case 1: create(); break; case 2: encrypt(); break; case 3: decrypt(); break; case 4: printf("非常感谢您的使用!期待与您下次相见!n"); break; } if(choice==4)break; } return 0; } void create(void) { FILE * f; char c[1200],m; int k,i; printf("请输入想要创建的完整文件路径:"); m=getchar(); gets(address); printf("请输入文件内容(以##结束)n"); for(i=0;i<1200;i++) { scanf("%c",&c[i]); if(c[i-1]=='#'&&c[i]=='#')break; } c[i-1]=' ';c[i]=' '; if((f=fopen(address,"w"))==NULL) { printf("File open error!n"); exit(0); } fputs(c,f); fclose(f); getchar(); printf("n文件创建成功!n"); getchar(); } void encrypt(void) { int n = 1,x,i=0; FILE *fp, *fp1; char c, fname[M]; while(n) { printf("n输入加密密码(至少两个字母和四个数字,并且以字母开头):n"); scanf("%s",code); x = proceed(code); if(x == 1) { while(n) { printf("n输入加密文件的路径n"); scanf("%s",fname); if((fp = fopen(fname,"rb")) == NULL) { printf("n无法打开,继续按 Y or yn"); getchar(); n = judge(); } if((fp1 = fopen("encrypt.txt","wb")) == NULL) { printf("无法打开n"); exit(0); } rewind(fp); while((c = fgetc(fp)) != EOF) { if(i>=strlen(code))i=0; c=c^(code[i]); fputc(c,fp1); i++; } fclose(fp1); fclose(fp); remove(fname); rename("encrypt.txt",fname); printf("n文档加密并保存成功!n"); printf("n请按回车继续n"); n = judge(); } } else printf("n密码不合格!n"); getchar(); } } void decrypt(void) { int n = 1; FILE *fp,*fp1,*fp3; char c,fname[M],a; int i; while(n) { printf("n输入解密密码n"); scanf("%s",code1); while(n) { printf("n解密的文件路径:n"); scanf("%s",fname); printf("n"); if((fp = fopen(fname,"rb")) == NULL) { printf("n 文件打不开n"); exit(0); } if((fp1 = fopen("decrypt.txt","wb")) == NULL) { printf("无法打开文件!n"); exit(0); } rewind(fp); while((c = fgetc(fp)) != EOF) { if(i>=strlen(code1))i=0; c=c^(code1[i]); putchar(c); fputc(c,fp1); i++; } fclose(fp1); fclose(fp); getchar(); remove(fname); printf("n"); rename("decrypt.txt",fname); printf("请按回车继续n"); n = judge(); } } } int judge(void) { char x; scanf("%c",&x); if(x == 'Y' || x == 'y') return 1; else return 0; } int proceed(char code[]) { int i, flag1 = 0,flag2 = 0,len, flag = 0; len = strlen(code); for(i = 0; i< len; i++) { if(code[0]>= 'a' && code[0] <= 'z'||code[0] >= 'A' && code[0] <= 'Z')flag=1; if(code[i] >= 'a' && code[i] <= 'z') flag1 += 1; else if(code[i] >= 'A' && code[i] <= 'Z') flag1 += 1; else if(code[i] >= '0' && code[i] <= '9') flag2 += 1; } if(flag1 >= 2 && flag2 >= 4 && flag==1) return 1; else return 0; }



