📄 c_encryption.txt
字号:
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <conio.h>
char s1[100],x[11];
char mc,y,mc1,waitec;
unsigned int fn1,fn2,dn,fn;
void m(),fdir(),fdeal1(),fdeal2();
char dyz(),fyz();
void help();
void copyright();
void bye();
main()
{
copyright();
help();
while (1)
{
system("cls");
printf("\n\n\n\n\n");
printf(" 请 选 择 相 应 的 按 键 :\n\n");
printf("\n\n 1. 处 理 文 件 .\n\n");
printf("\n 2. 处 理 文 件 夹 .\n\n");
printf("\n 3. [ Q ] 键 退 出 .");
printf("\n\n\n \n\n\n");
printf("\n\n [c] 键 -- 版权 [h] 键 -- 帮助");
mc=getch();
switch (mc)
{
case '1':m();break;
case '2':m();break;
case 'h':help();break;
case 'c':copyright();break;
case 'H':help();break;
case 'C':copyright();break;
default:;
}
if (mc=='q' || mc=='Q' || mc=='3') break;
}
bye();
return;
}
void bye()
{
system("cls");
printf("\n\n\n\n\n\n\n\n 谢 谢 使 用 !");waitec=getch();
return;
}
void copyright()
{
system("cls");
printf("\n\n\n\n");
printf(" 文 件 加 密 器 1.0版本");
printf("\n");
printf("\n\n");
printf(" 作者: 山东科技大学 管理98-1 欧阳劲");
printf("\n");
printf("\n\n");
printf(" 开发环境: tc 2.0");
printf("\n\n\n\n\n");
printf(" 本工具可以加密文件夹,单个文件,或类似*.*文件");
printf("\n\n");
printf(" 名的文件群,详细使用请查看帮助.");
waitec=getch();
}
void help()
{
system("cls");
printf("");
printf(" 文件加密器 1.0版本 使用说明");
printf("\n\n");
printf("1. 功能有加解密文件,文件群,文件夹,可处理任何类型的文件.\n\n");
printf("2. 按照提示选项,按下相应的数字键或字母键即可.\n\n");
printf("3. 输入密码最多为十位,注意密码包括任何符号,包括[backspace],所以无法对已输入密码\n\n");
printf(" 进行修改,若输入错误,可输入一错误密码进行再次输入.\n\n");
printf("4. 当给文件加密时(非文件夹),可输入dos下的*,?等符号,当只输入*.*时,也对本程序加密!\n");
printf("5. 当给文件加密时(非文件夹),(非文件夹),只处理文件,不对子文件夹进行处理.\n\n");
printf("6. 当给文件夹加密时,对整个文件夹进行处理,包括子文件夹.\n\n");
printf("7. 若处理过程中程序出错,请仔细查看出错信息,进行处理,若发现名为tmp*.$$$的文件,可\n\n");
printf(" 用记事本打开,若为无用文件,删除即可.\n\n");
printf("8. 由于本程序的一些bug,当对重要文件加密时,最好先备份,加密后,再解密进行查看,若无\n\n");
printf(" 错误,可删除备份.\n\n");
printf("9. 本程序加密时,直接替换原文件,不进行备份.");
waitec=getch();
return;
}
void m()
{
int l;
char x1[11];
while (1)
{
fn=0;fn1=0;fn2=0;dn=0;
while (1){system("cls");printf("\n\n\n\n\n\n 1.加密\n\n 2.解密\n\n");
printf(" 3. [ Q ] 键 退 出 ");
y=getch();
if (y=='1')
{system("cls");printf("\n\n\n\n\n\n\n\n 加密!");break;}
if (y=='2'){system("cls");printf("\n\n\n\n\n\n\n\n 解密!");break;}if (y=='q' || y=='Q' || y=='3')return;}
if (mc=='1'){printf("\n\n\n 请输入您要处理的文件: ");scanf("%s",&s1);}
else {printf("\n\n\n 请输入您要处理的文件夹:");scanf("%s",&s1);l=strlen(s1);
if (s1[l-1]!=92)strcat(s1,"\\");}
while (1){
printf("\n\n 请输入加/解密密码 :");
for (l=0;l<10;l++)
{
x[l]=getch();
if (x[l]==13) break;
printf("*");
}
x[l]='\0';
if(strcmp(x,"")==0) {printf("\n 密码不能为空!\n");continue;}
printf("\n\n 请输入 确 懧 密码 :");
for (l=0;l<10;l++)
{
x1[l]=getch();
if (x1[l]==13) break;
printf("*");
}
x1[l]='\0';
if (strcmp(x,x1)!=0) {printf("\n 密码不一致!\n");continue;}
break;
}
system("cls");
printf("\n\n\n\n\n\n 密码正确!\n");
printf("\n\n 开始处理?[y/n]\n\n");
waitec=getch();
if (waitec=='n' || waitec=='N') continue;
system("cls");
printf("\n 正在处理,请等待...\n");
if (strlen(s1)>2)
{if (s1[1]==':' && s1[2]=='\\')
{if (s1[0]=='c' || s1[0]=='C')system("c:\");
else
{if (s1[0]=='d' || s1[0]=='D')system("d:\");
else system("e:\");}
}}
fdir();
printf("\n\n 处理完毕,按任意键继续...");
waitec=getch();
strcpy(x,"");strcpy(x1,"");
system("cls");
fn2=fn-fn1;
printf("\n\n\n\n\n\n\n\n 共处理了 [%d] 个子文件夹,成功处理文件 [%d] ,处理文件失败 [%d]!\n\n",dn,fn1,fn2);
waitec=getch();
}
}
void fdir()
{
int i;
char s2[100],s3[100],s4[13];
tmpnam(s2);strcpy(s4,s2);strcpy(s3,">>");
strcat(s3,s2);strcpy(s2,s1);
strcat(s1,s3);strcpy(s3,"dir /w/a ");strcat(s3,s1);
system(s3);
/*if (dyz(s4)=='n'){remove(s4);printf("\n文件夹 [%s] 不存在!",s2);return;}*/
if (mc=='1')
{
mc1='0';
for (i=strlen(s2)-1;i>=0;i--){if (s2[i]=='\\') {s2[i+1]='\0';mc1='1';break;}}
}
fdeal1(s2,s4);remove(s4);
return;
}
void fdeal1(char s2[100],char s4[13])
{
int i,n;
char c[2],s5[50];
FILE *p1;
if ((p1=fopen(s4,"r"))==NULL) {printf("\n 无法处理文件夹:%s!",s4);return;}
for (n=1;n<6;n++){fgets(s1,100,p1);}
c[1]='\0';
while (1)
{
if ((c[0]=fgetc(p1))==EOF) {fclose(p1);return;}
if (c[0]==91)
{
strcpy(s5,"");c[0]=fgetc(p1);while (c[0]!=93)
{strcat(s5,c);c[0]=fgetc(p1);}
if (mc=='1') continue;
if (strcmp(s5,".")==0 || strcmp(s5,"..")==0) continue;
n=strlen(s5);s5[n]=92;s5[n+1]='\0';
strcpy(s1,s2);
strcat(s1,s5);if (dn<65500)dn++;fdir();
continue;
}
if (c[0]==32 || c[0]==13 || c[0]==10 || c[0]==9) continue;
strcpy(s5,"");
if (c[0]>47 && c[0]<58)
{
while (c[0]!=32 && c[0]!=9 && c[0]!=13 && c[0]!=10)
{strcat(s5,c);c[0]=fgetc(p1);}
c[0]=fgetc(p1);
if (c[0]=='f') {fclose(p1);return;}
if (mc1=='0' && mc=='1') {strcpy(s1,s5);fdeal2(s2,s5);continue;}
strcpy(s1,s2);strcat(s1,s5);
fdeal2(s2,s5);continue;
}
while (c[0]!=32 && c[0]!=9 && c[0]!=13 && c[0]!=10)
{strcat(s5,c);c[0]=fgetc(p1);}
if (mc1=='0' && mc=='1') {strcpy(s1,s5);fdeal2(s2,s5);continue;}
strcpy(s1,s2);strcat(s1,s5);
fdeal2(s2,s5);
}
}
void fdeal2(char s2[],char s5[])
{
char s3[13],s4[13],c;
int m,n;
FILE *p1,*p2;
m=strlen(s5);
if (y=='1' && s5[0]=='_' && s5[1]=='_' )
{printf("\n 文件 [%s] 已被加密,不予处理!",s1);return;}
if (m<=2 && y=='2')
{printf("\n 文件 [%s] 未被加密,不能解密!",s1);return;}
if (y=='2' &&(s5[0]!='_' || s5[1]!='_'))
{printf("\n 文件 [%s] 未被加密,不能解密!",s1);return;}
if (fn<65500)fn++;
tmpnam(s3);tmpnam(s4);
if (rename(s1,s3)!=0) {printf("\n 文件%s处理失败!",s1);return;}
if ((p1=fopen(s3,"rb"))==NULL) {printf("\n 文件%s处理失败!",s1);rename(s3,s1);return;}
if ((p2=fopen(s4,"wb+"))==NULL)
{printf("\n 文件%s处理失败!",s1); fclose(p1);rename(s3,s1);return;}
m=strlen(x);
while (1)
{
for (n=0;n<m;n++)
{
c=fgetc(p1);
if (feof(p1)) break;
if (y=='1') {if(n<m-1)c=c+x[n]+x[n+1];else c=c+x[n]+x[0];}
else {if(n<m-1)c=c-x[n]-x[n+1];else c=c-x[n]-x[0];}
fputc(c,p2);
}
if (feof(p1)) break;
}
fclose(p1);fclose(p2);
remove(s3);
if (mc=='2' ||(mc=='1' && mc1=='1'))
{
if (y=='1'){strcpy(s1,s2);strcat(s1,"__");strcat(s1,s5);}
if (y=='2')
{m=strlen(s5);for (n=2;n<m;n++){s5[n-2]=s5[n];}s5[m-2]='\0';strcpy(s1,s2);strcat(s1,s5);}
}
else
{
if (y=='1') {strcpy(s1,"__");strcat(s1,s5);}
if (y=='2') {m=strlen(s5);for (n=2;n<m;n++){s5[n-2]=s5[n];}s5[m-2]='\0';strcpy(s1,s5);}
}
rename(s4,s1);
if (fn1<65500)fn1++;
return;
}
char dyz(char s5[])
{
unsigned int n1=0;
char yz;
FILE *p;
p=fopen(s5,"r");
while (1)
{if ((waitec=fgetc(p))==EOF) break;
n1++;
if (n1>200) break;}
fclose(p);
if (n1<160) yz='n';
else yz='y';
return yz;
}
char fyz()
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -