用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

}

这道题,并不难,只是楼主,没有说清,是就字母移位吗?

但是看你的例子,有不全是。

程序如下:

#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

}

文件中啊!(C)

首先file1中存一些信息(直接在文件中手写或者通过源程序从屏幕中读取)

大致过程{

fp1 = fopen("file1", "w")//write

scanf("%c", &ch1)//用while循环多次写入

fprintf(fp1, "%c", ch1);

}

第辩渗腔二:从文件中读取内容,和0x6a异或

fp2 = fopen ("file1", "r")//read

fp3 = fopen ("file2", "w")//write

fscanf(fp2, "%c", &ch2)//用while循环多次读出

异或 *** 作,结携衫果赋给ch3

printf("%c", ch )//屏幕显示

fprintf(fp3, "%c", ch3)//写入file2中

第三:读出file2的内容

fp3 = fopen ("file2", "r")//read

fscanf(fp3, "%c", &ch4)//用while循环多次读出

printf(“%c”, ch );

大概过程就是这样,喊厅文件主要是自己写才能掌握,这里就不把代码给你了。

上面的部分代码给你参考一下。有问题欢迎询问

源程序只是负责 *** 作;file1和file2是存放数据的文件,可以看成结构体。

文件 *** 作好好学,很重要!


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

原文地址: http://outofmemory.cn/tougao/12200118.html

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

发表评论

登录后才能评论

评论列表(0条)

保存