十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
ch=ch^*(pwd+i); //对读取的一个字符,进行异或
专注于为中小企业提供成都网站设计、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业西盟免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
重点是这,,,,,,就是使用密码,对源文件逐byte异或、
if(i9){
i=0;
}
密码也循环使用。
~~~~~~~~~~~~
文件分为文本文件和二进制文件。加密方法也略有不同。
1、文本文件
加密的主要是文本的内容,最简单的方法就是修改文档的内容,比如1.txt中的文件内容:
abcd
只要给每一个字符+1,就可以实现加密。文件内容即会变为
bcde
2、二进制文件加密
二进制文件加密也就是对应用程序加密,需要理解可执行文件格式,比如Windows平台的Exe文件它是PE结构,Linux上的可执行文件是ELF结构,要对这样的程序进行加密,实际上是开发一种叫做“壳”的程序,这种程序的开发,需要将扎实的底层基础,同时也需要对软件加密解密有细致的理解,比如流行的vmprotect、z壳以及早些年的upx壳、aspack等等。
3、无论哪种加密都牵涉到文件操作的问题,使用C语言进行文件操作时,极少使用C标准库中的I/O函数,大多数使用操作系统提供的内存文件映射相关的API函数,有兴趣,可以搜索相关的资料。
#includestdio.h
int main()
{char ch;
FILE *fp1,*fp2;
fp1=fopen("d:\\file1.txt","r");
fp2=fopen("d:\\file2.txt","w");
printf("加密后的内容:\n");
while((ch=fgetc(fp1))!=EOF)
{ch^=0x6a; putchar(ch); fputc(ch,fp2);}
fclose(fp1);
fclose(fp2);
printf("\n解密后的内容:\n");
fp2=fopen("d:\\file2.txt","r");
while((ch=fgetc(fp2))!=EOF)
{ch^=0x6a; putchar(ch);}
return 0;
}
这里使用的是按位加密,按ASCII码进行加密的算法自己写个,很容易的。
#includestdio.h
#includestdlib.h
#includeconio.h
#includestring.h
void
dofile(char
*in_fname,char
*pwd,char
*out_fname);/*对文件进行加密的具体函数*/
void
usage(char
*name);
void
main(int
argc,char
*argv[])/*定义main()函数的命令行参数*/
{
char
in_fname[30];/*用户输入的要加密的文件名*/
char
out_fname[30];
char
pwd[10];/*用来保存密码*/
if(argc!=4)
{/*容错处理*/
usage(argv[0]);
printf("\nIn-fname:\n");
gets(in_fname);/*得到要加密的文件名*/
while(*in_fname==NULL)
{
printf("\nIn-fname:\n");
gets(in_fname);
}
printf("Password
6-8:\n");
gets(pwd);/*得到密码*/
while(*pwd==NULL
||
strlen(pwd)8
||
strlen(pwd)6)
{
printf("Password
6-8:\n");
gets(pwd);
}
printf("Out-file:\n");
gets(out_fname);/*得到加密后你要的文件名*/
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密请再次运行程序\n");
}
else
{/*如果命令行参数正确,便直接运行程序*/
strcpy(in_fname,argv[1]);
strcpy(pwd,argv[2]);
strcpy(out_fname,argv[3]);
while(*pwd==NULL
||
strlen(pwd)8
||
strlen(pwd)6)
{
printf("Password
faied!\n");
printf("Password
6-8:\n");
gets(pwd);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密请再次运行程序\n");
}
}
/*加密子函数开始*/
void
dofile(char
*in_fname,char
*pwd,char
*out_file)
{
FILE
*fp1,*fp2;
register
char
ch;
int
j=0;
int
j0=strlen(pwd);
fp1=fopen(in_fname,"rb");
if(fp1==NULL)
{
printf("cannot
open
in-file.\n");
exit(1);/*如果不能打开要加密的文件,便退出程序*/
}
fp2=fopen(out_file,"wb");
if(fp2==NULL)
{
printf("cannot
open
or
create
out-file.\n");
exit(1);/*如果不能建立加密后的文件,便退出*/
}
/*加密算法开始*/
while(j0=0)
{
ch=fgetc(fp1);
while(!feof(fp1))
{
fputc(ch^pwd[j=j0?j=0:j++],fp2);/*异或后写入fp2文件*/
ch=fgetc(fp1);
}
j0--;
}
fclose(fp1);/*关闭源文件*/
fclose(fp2);/*关闭目标文件*/
}
void
usage(char
*name)
{
printf("\t=======================File
encryption======================\n");
printf("\tusage:
%s
In-fname
password
out_fname\n",name);
printf("\tExample:
%s
file1.txt
12345678
file2.txt\n",name);
}
#include stdio.h
void main()
{
int a[5]; /* 存储各位上的数字 */
int num, temp, encripy; /* num是要输入的数,temp是交换时用来存储临时值,encripy是加密后的数据 */
int i;
do
{
printf("Please input the number:");
scanf("%d",num);
if(!(num/10000 !=0 num/100000==0))
printf("Data error!\n");
}while(!(num/10000 !=0 num/100000==0));
a[0] = num/10000%10; /* 求各位上的数字 */
a[1] = num/1000%10;
a[2] = num/100%10; /* 百位上的数字 */
a[3] = num/10%10; /* 十位上的数字 */
a[4] = num%10; /* 个位上的数字 */
for(i = 0; i 5; ++i) /* 开始加密 */
a[i] = (a[i] + 8)%10;
temp = a[0]; /* 交换位置开始 */
a[0] = a[3];
a[3] = temp;
temp = a[1];
a[1] = a[2];
a[2] = temp; /* 交换位置结束同时加密结束 */
encripy = a[0]*10000 + a[1]*1000 + a[2]*100 + a[3]*10 + a[4]; /* 加密后的数据 */
printf("\nThe scourse number: %d\n", num); /* 输出原数据 */
printf("\nEncripy the number: %d\n\n", encripy); /* 输出加密后的数据 */
}
在VC6.0成功运行,希望对你有帮助!
//自己写的加密,加密方法就是根据输入的密码对文件中的内容进行异或后存放在加密后的文件中
//转载请声明program by STU caige
#includestdio.h
#includestdlib.h
#include conio.h//getche()需要
#includestring.h
char ch;
//异或函数
int YiHuo(FILE *f0,FILE *fp,int passwordnum,int move,char key)
{
while(fread(ch,1,1,f0),!feof(f0))
{
if (key==49)//加密
{
ch=ch+move;
(char)(ch^=passwordnum);
fwrite(ch,1,1,fp);
}
if (key==50)//解密
{
(char)(ch^=passwordnum);
ch=ch+move;
fwrite(ch,1,1,fp);
}
}
}
int main()
{
//encrypt加密 decrypt解密
FILE *f0,*fe,*fd;
char fname0[50];
char efname[50]={0};
char dfname[50]={0};
char Password[50]={0},key=0,key2=0;
char sysfname[20]={0};
int p=0,passwordnum,move=0;//异或后移动的次数 ;
system("cls");
do
{
system("cls");
do
{
printf("1-----------加密文件\n");
printf("2-----------解密文件\n");
printf("Esc----------退出\n") ;
key=getch();//读入一个键盘码
}
while ((key!='1')(key!='2')(key!=27));
Password[50]=0;
passwordnum=0;
if (key==49)
{
system("cls");
printf("请输入要加密的文件绝对路径\n");
scanf("%s",fname0);
// while(key=0)
//打开原文件
if ((f0=fopen(fname0,"rb"))==NULL)
{
printf("文件打不开哦!\n");
key=0;//文件打开失败时key的值改变
exit(0);
printf("加密失败\n");
system("pause");
}
//只有文件fname0打开成功时才能继续打开efname
if(key==49)
{
system("cls");
printf("请输入完成加密的文件存储路径\n");
scanf("%s",efname);
if ((fe=fopen(efname,"w+"))==NULL)
{
printf("文件打不开哦!\n");
printf("加密失败\n");
fclose(f0);
system("pause");
exit(0);
key=0;
}
}
//如果打开文件成功则开始输入密码
if(key==49)
{
system("cls");
printf("请输入密码\n");
scanf("%s",Password);
//把字符密码转化为整形来异或
for(p=0;Password[p]!=0;p++)
passwordnum+=((int)Password[p]);
move=(int)(passwordnum%9);
while (move9)
move=(int)(move%9);
printf("%d",move);system("pause");
}
if (key==49)
{//异或加密
system("cls");
YiHuo(f0,fe,passwordnum,move,key);
printf("\n加密成功,您的输出文件路径为:\n");
printf("%s",efname);
fclose(f0);
fclose(fe);
}
}
if (key==50)
{
system("cls");
printf("请输入要解密的文件绝对路径\n");
scanf("%s",fname0);
// while(key=0)
//打开原文件
if ((f0=fopen(fname0,"rb"))==NULL)
{
printf("文件打不开哦!\n");
key=0;//文件打开失败时key的值改变
exit(0);
printf("解密失败\n");
system("pause");
}
//只有文件fname0打开成功时才能继续打开dfname
if(key==50)
{
system("cls");
printf("请输入完成解密的文件存储路径\n");
scanf("%s",dfname);
if ((fd=fopen(dfname,"w+"))==NULL)
{
printf("解密失败");
fclose(f0);
system("pause");
printf("文件打不开哦!\n");
exit(0);
key=0;
}
}
//如果打开文件成功则开始输入密码
if(key==50)
{
system("cls");
printf("请输入密码\n");
scanf("%s",Password);
//把字符密码转化为整形来异或
for(p=0;Password[p]!=0;p++)
passwordnum+=((int)Password[p]);
move=(int)(passwordnum%9);
while (move9)
move=(int)(move%9);
move=(-move);
}
if (key==50)
{//异或加密
system("cls");
YiHuo(f0,fd,passwordnum,move,key);
printf("\n解密成功,您的输出文件路径为:\n%S",dfname);
system("pause");
fclose(f0);
fclose(fd);
}
}
}
while(key!=27);//当key为0,即读写两个文件都打开成功时才结束循环
return 0;
printf("\n谢谢使用!,program by STU caige\n");
system("pause");
}