?? 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 + -