c语言文件加密和解密

c语言文件加密和解密,第1张

c语言文件加密和解密方法如下:

1、首先打开VC++6.0;

2、选择文件,新建;

3、选择C++ source file 新建一个空白文档;

4、声明头文件

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

首先写个加密函数,算法就是简介里说的

void EncryptFile(FILE *sfp,FILE *dfp,char pwd)

{

char ch

if(sfp==0||dfp==0)

{

printf("ERROR!\n")

return

}

while((ch=fgetc(sfp))!=EOF)

{

if((ch>='a')&&(ch<='z'))

{

ch=(ch-'a'+1)%26+'a'

ch=ch^pwd

}

if((ch>='A')&&(ch<='Z'))

{

ch=(ch-'A'+1)%26+'A'

ch=ch^pwd

}

fputc(ch,dfp)

 哪银 }

}

写解密子函数:与加密的过程相反 

 void DecryptFile(FILE *sfp,FILE *dfp,char pwd)

{

char ch

while((ch=fgetc(sfp))!=EOF)

{

if((ch>='a')&&(ch<='z'))

{

ch=ch^pwd

ch=(ch-'a'+25)%26+'a'

}

if((ch>='A')&&(ch<='Z'))

{

ch=ch^pwd

李梁宴ch=(ch-'A'+25)%26+'A'

}

fputc(ch,dfp)

}

}

输出函数,输出文件内容

void OutputFile(FILE *fp)

{

char ch

while((ch=fgetc(fp))!=EOF)

putchar(ch)

}

 主函数,主要调用这几个函数

int main()

{

/*用户输入的要加密的文件名*/

char sfilename[20]

/*用户输入加密后保存的文件名*/

char dfilename[20]

/*用来保存密码字符*/

char pwd

FILE *sfp,*dfp

printf("\nPlease input filename to be encrypted:\n")

/*得到要加密的文件名*/

gets(sfilename)

/*得到加密后你要的文件名*/

printf("input filename to save the encrypted file:\n")

gets(dfilename)

/*得到加密字符*/

printf("Please input your Password:\n")

//scanf("%c",&渣答pwd)

pwd=getch()

/*屏幕以*来表示输入的加密字符*/

printf("*\n")

/*以只读方式打开要加密的文件*/

if((sfp=fopen(sfilename,"r"))==0)

{

printf("Can't open the file :%s\n",sfilename)

exit(0)

}

/*输出要加密的文件*/

printf("\nThe the text of file to be encrypted is:\n")

OutputFile(sfp)

/*建立加密后的文件*/

if((dfp=fopen(dfilename,"w+"))==0)

{

printf("Can't open or create the file :%s\n",dfilename)

//exit(0)

}

/*文件加密*/

fseek(sfp,0L,SEEK_SET)

EncryptFile(sfp,dfp,pwd)

printf("\n\nEncrypted the file successfully!\n")

/*输出加密后的文件*/

printf("\nAfter encrypting the text of file is:\n")

fseek(dfp,0L,SEEK_SET)

OutputFile(dfp)

fclose(sfp)

fclose(dfp)

getch()

return 0

}

 

你所使用的文件处理函数,均为fputc,fgetc,fscanf等字符处理函数

加档仔密前,文本内容确实是字符串,但是加密行蠢雹后,就会存在非字符型数据,这时候fputc,fgetc,fscanf等档帆函数就不能进行正常处理了。简单的例子,\0,\13这些数据会被字符处理函数截断

所以请使用fread,fwrite等函数,这样就不会局限于字符串了

比如fscanf(rsc,"%d,",&sec[temp]),你可以写成fread((void *)&sec[temp],sizeof(int),1,rsc)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12322569.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存