fseek(fp,0,SEEK_END); //將位置指針移到文件末尾 SEEK_END是宏定義
站在用戶的角度思考問題,與客戶深入溝通,找到農(nóng)安網(wǎng)站設(shè)計(jì)與農(nóng)安網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋農(nóng)安地區(qū)。
//表示文件尾
int len=ftell(fp); // ftell()函數(shù)可以得到
//文件當(dāng)前位置相對(duì)于文件首的偏移字節(jié)數(shù) .
//在這也就是得到了文件的長(zhǎng)度。
pBuf=new char[len+1]; //分配文件長(zhǎng)度+1個(gè)字符的空間
rewind(fp); //位置指針回到文件首部
fread(pBuf,1,len,fp); //將文件內(nèi)容讀入到剛才分配的Buffer中
pBuf[len]=0; //buffer的最后一位置為0 即'\0'
//表示字符串的結(jié)束
printf("%s\n",pBuf); //打印出buffer內(nèi)容 即文件內(nèi)容
fclose(fp); // 關(guān)閉文件指針
printf("請(qǐng)輸入加密/解密的密碼:\n");
scanf("%s",key); //終端輸入加密或解密的密碼
sc(pBuf,key,len,strlen(key)); //進(jìn)行加密/解密 輸入pBuf 加密/解密后文本仍
//放在pBuf中
printf("請(qǐng)輸入保存加密文件的文件名:\n");
scanf("%s",filename); //終端輸入加密/解密后保存的文件名
if((fp=fopen(filename,"wb"))==NULL) //創(chuàng)建該文件
{printf("無法保存文件,請(qǐng)注意磁盤是否已滿!\n");
exit(0); }
else
fwrite(pBuf,1,len,fp); //將加密/解密后文本寫到文件中
fclose(fp); //關(guān)閉文件
void sc(char *fp,char *key,int Flen,int Klen)//是一個(gè)加密/解密函數(shù)
{int i,j,k;
for(i=0;iFlen;i+=Klen)
for(j=i,k=0;kKlen;j++,k++)
fp[j]^=key[k];fp[i]='\0';printf("%s\n",fp);}
這道題,并不難,只是樓主,沒有說清,是就字母移位嗎?
但是看你的例子,有不全是。
程序如下:
#include stdio.h
#include stdlib.h
FILE *source;//源文件
FILE *destination;//目標(biāo)文件
int key;//密鑰
char file[100];//文件名
void encryption()//加密
{
char ch;
printf("請(qǐng)輸入要加密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)
{
printf("無法打開文件!\n");
exit(0);
}
printf("請(qǐng)輸入加密后的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)
{
printf("無法創(chuàng)建文件!\n");
exit(0);
}
printf("請(qǐng)輸入密鑰\n");
scanf("%d",key);
ch=fgetc(source);
while(ch!=EOF)
{
if(ch=='\n')
{
fputc(ch,destination);
ch=fgetc(source);
continue;
}
ch+=key;
fputc(ch,destination);
ch=fgetc(source);
}
fclose(source);
fclose(destination);
}
void decrypt()//解密
{
char ch;
printf("請(qǐng)輸入要解密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)
{
printf("無法打開文件!\n");
exit(0);
}
printf("請(qǐng)輸入加密后的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)
{
printf("無法創(chuàng)建文件!\n");
exit(0);
}
printf("請(qǐng)輸入密鑰\n");
scanf("%d",key);
ch=fgetc(source);
while(ch!=EOF)
{
if(ch=='\n')
{
fputc(ch,destination);
ch=fgetc(source);
continue;
}
ch-=key;
fputc(ch,destination);
ch=fgetc(source);
}
fclose(source);
fclose(destination);
}
int main()//主函數(shù)提供菜單
{
int choice=0;
printf("******************\n");
printf("1 文件加密\n");
printf("2 文件解密\n");
printf("3 退出\n");
printf("******************\n");
printf("請(qǐng)輸入1 2 3選擇操作\n");
scanf("%d",choice);
switch(choice)
{
case 1:encryption();break;
case 2:decrypt();break;
case 3:break;
}
return 0;
}
這里使用的是按位加密,按ASCII碼進(jìn)行加密的算法自己寫個(gè),很容易的。
#includestdio.h
#includestdlib.h
#includeconio.h
#includestring.h
void
dofile(char
*in_fname,char
*pwd,char
*out_fname);/*對(duì)文件進(jìn)行加密的具體函數(shù)*/
void
usage(char
*name);
void
main(int
argc,char
*argv[])/*定義main()函數(shù)的命令行參數(shù)*/
{
char
in_fname[30];/*用戶輸入的要加密的文件名*/
char
out_fname[30];
char
pwd[10];/*用來保存密碼*/
if(argc!=4)
{/*容錯(cuò)處理*/
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("加密成功,解密請(qǐng)?jiān)俅芜\(yùn)行程序\n");
}
else
{/*如果命令行參數(shù)正確,便直接運(yùn)行程序*/
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("加密成功,解密請(qǐng)?jiān)俅芜\(yùn)行程序\n");
}
}
/*加密子函數(shù)開始*/
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);/*關(guān)閉源文件*/
fclose(fp2);/*關(guān)閉目標(biāo)文件*/
}
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);
}
C語言代碼和運(yùn)行結(jié)果如下:
輸出符合示例,加解密均正確,望采納~
附源碼鏈接:字符串加解密
C語言設(shè)計(jì)一個(gè)簡(jiǎn)單的加密解密程序如下:
加密程序代碼:
#includestdio.h
main()
{
char
c,filename[20];
FILE
*fp1,*fp2;
printf("請(qǐng)輸入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwen.txt","w");
do
{
c=fgetc(fp1);
if(c=32c=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代碼:
#includestdio.h
#includestring.h
main()
{
char
c,filename[20];
char
yanzhengma[20];
FILE
*fp1,*fp2;
printf("請(qǐng)輸入待解密文件名:\n");
scanf("%s",filename);
printf("請(qǐng)輸入驗(yàn)證碼:\n");
scanf("%s",yanzhengma);
if(strcmp(yanzhengma,"shan")==0)
{
fp1=fopen(filename,"r");
fp2=fopen("yuanwen.txt","w");
do
{
c=fgetc(fp1);
if(c=32c=126)
{
c=126-c;
c=32+c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("驗(yàn)證碼錯(cuò)誤!請(qǐng)重新輸入:\n");
scanf("%s",filename);
}
}
網(wǎng)頁名稱:c語言加解密函數(shù),c語言加密解密程序
轉(zhuǎn)載注明:http://vcdvsql.cn/article42/hseeec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、Google、域名注冊(cè)、網(wǎng)站排名、網(wǎng)站導(dǎo)航、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)