fseek(fp,0,SEEK_END); //將位置指針移到文件末尾 SEEK_END是宏定義
站在用戶的角度思考問題,與客戶深入溝通,找到農安網站設計與農安網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:網站設計制作、成都做網站、企業官網、英文網站、手機端網站、網站推廣、主機域名、雅安服務器托管、企業郵箱。業務覆蓋農安地區。
//表示文件尾
int len=ftell(fp); // ftell()函數可以得到
//文件當前位置相對于文件首的偏移字節數 .
//在這也就是得到了文件的長度。
pBuf=new char[len+1]; //分配文件長度+1個字符的空間
rewind(fp); //位置指針回到文件首部
fread(pBuf,1,len,fp); //將文件內容讀入到剛才分配的Buffer中
pBuf[len]=0; //buffer的最后一位置為0 即'\0'
//表示字符串的結束
printf("%s\n",pBuf); //打印出buffer內容 即文件內容
fclose(fp); // 關閉文件指針
printf("請輸入加密/解密的密碼:\n");
scanf("%s",key); //終端輸入加密或解密的密碼
sc(pBuf,key,len,strlen(key)); //進行加密/解密 輸入pBuf 加密/解密后文本仍
//放在pBuf中
printf("請輸入保存加密文件的文件名:\n");
scanf("%s",filename); //終端輸入加密/解密后保存的文件名
if((fp=fopen(filename,"wb"))==NULL) //創建該文件
{printf("無法保存文件,請注意磁盤是否已滿!\n");
exit(0); }
else
fwrite(pBuf,1,len,fp); //將加密/解密后文本寫到文件中
fclose(fp); //關閉文件
void sc(char *fp,char *key,int Flen,int Klen)//是一個加密/解密函數
{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;//目標文件
int key;//密鑰
char file[100];//文件名
void encryption()//加密
{
char ch;
printf("請輸入要加密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)
{
printf("無法打開文件!\n");
exit(0);
}
printf("請輸入加密后的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)
{
printf("無法創建文件!\n");
exit(0);
}
printf("請輸入密鑰\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("請輸入要解密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)
{
printf("無法打開文件!\n");
exit(0);
}
printf("請輸入加密后的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)
{
printf("無法創建文件!\n");
exit(0);
}
printf("請輸入密鑰\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()//主函數提供菜單
{
int choice=0;
printf("******************\n");
printf("1 文件加密\n");
printf("2 文件解密\n");
printf("3 退出\n");
printf("******************\n");
printf("請輸入1 2 3選擇操作\n");
scanf("%d",choice);
switch(choice)
{
case 1:encryption();break;
case 2:decrypt();break;
case 3:break;
}
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);
}
C語言代碼和運行結果如下:
輸出符合示例,加解密均正確,望采納~
附源碼鏈接:字符串加解密
C語言設計一個簡單的加密解密程序如下:
加密程序代碼:
#includestdio.h
main()
{
char
c,filename[20];
FILE
*fp1,*fp2;
printf("請輸入待加密的文件名:\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("請輸入待解密文件名:\n");
scanf("%s",filename);
printf("請輸入驗證碼:\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("驗證碼錯誤!請重新輸入:\n");
scanf("%s",filename);
}
}
網頁名稱:c語言加解密函數,c語言加密解密程序
轉載注明:http://m.newbst.com/article42/hseeec.html
成都網站建設公司_創新互聯,為您提供微信公眾號、Google、域名注冊、網站排名、網站導航、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯