文件资料加解密处理程序文档格式.docx

上传人:b****4 文档编号:7815027 上传时间:2023-05-09 格式:DOCX 页数:21 大小:87.50KB
下载 相关 举报
文件资料加解密处理程序文档格式.docx_第1页
第1页 / 共21页
文件资料加解密处理程序文档格式.docx_第2页
第2页 / 共21页
文件资料加解密处理程序文档格式.docx_第3页
第3页 / 共21页
文件资料加解密处理程序文档格式.docx_第4页
第4页 / 共21页
文件资料加解密处理程序文档格式.docx_第5页
第5页 / 共21页
文件资料加解密处理程序文档格式.docx_第6页
第6页 / 共21页
文件资料加解密处理程序文档格式.docx_第7页
第7页 / 共21页
文件资料加解密处理程序文档格式.docx_第8页
第8页 / 共21页
文件资料加解密处理程序文档格式.docx_第9页
第9页 / 共21页
文件资料加解密处理程序文档格式.docx_第10页
第10页 / 共21页
文件资料加解密处理程序文档格式.docx_第11页
第11页 / 共21页
文件资料加解密处理程序文档格式.docx_第12页
第12页 / 共21页
文件资料加解密处理程序文档格式.docx_第13页
第13页 / 共21页
文件资料加解密处理程序文档格式.docx_第14页
第14页 / 共21页
文件资料加解密处理程序文档格式.docx_第15页
第15页 / 共21页
文件资料加解密处理程序文档格式.docx_第16页
第16页 / 共21页
文件资料加解密处理程序文档格式.docx_第17页
第17页 / 共21页
文件资料加解密处理程序文档格式.docx_第18页
第18页 / 共21页
文件资料加解密处理程序文档格式.docx_第19页
第19页 / 共21页
文件资料加解密处理程序文档格式.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

文件资料加解密处理程序文档格式.docx

《文件资料加解密处理程序文档格式.docx》由会员分享,可在线阅读,更多相关《文件资料加解密处理程序文档格式.docx(21页珍藏版)》请在冰点文库上搜索。

文件资料加解密处理程序文档格式.docx

评分等级

备注

评分等级有五种:

优秀、良好、中等、及格、不及格

一、课题容及要求

1.功能要求

编写一个对文件(由数字或字母组成)进行加密解密的程序。

可以将所需要的容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。

例如加密时可以将选取容的每个字符依次反复加上”49632873”中的数字,如果围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(既N%122).解密与加密的顺序相反。

2.菜单要求:

从键盘输入要进行加密的一行字符串或者需要加密的文件名。

显示菜单:

1.设置加密方法

2.加密

3.解密

4.显示原始文件和解密文件

选择菜单,进行相应的操作。

加密方法是设置一加密字符串以及对文件的哪些部分进行加密;

加密是将原始文件加密并保存到文件中;

解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性;

显示是将文件在屏幕上显示出来,供人工校对。

3.程序设计参考思路:

(1)定义原始文件sourse.txt、加密文件result.txt和还原文件recall.txt

(2)程序模块及函数功能:

(1)在屏幕上显示文件voidprinttxt();

(2)加密voidencode();

(3)解密voiddecode();

(4)文件比较voidcmptxt();

4.需要的知识:

(1)文件读取写入操作语言

(2)字符串的处理,如何对字符进行加减操作,并保证加减后的数值处于某一围之(模运算)

(3)了解加解密的基本原理

二、需求分析

模块分析:

(1)在屏幕上显示文件voidprinttxt()

用于将原始文件sourse.txt,加密文件result.txt,解密文件recall.txt,的容显示在屏幕上,方便检验程序是否正确执行。

在此函数中要以输入方式打开三个文件。

(2)加密voidencode()

对原始文件sourse.txt整个或部分字符串加密,并将加密后的容写入result.txt上。

加密时,每个字符依次反复加上”4963287312”中的数字,如果围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(即N%122).

例如:

加密the

(t)116+4,(h)104+9,(e)101+6

变为xqk

(3)解密voiddecode()

对加密后的result.txt进行解密,并将解密后的容写入recall.txt文件中。

解密过程与加密过程的顺序正好相反,即从第一个字符开始,每个字符依次反复减去”4963287312”中的数字,若执行减法后得到一个负数,则把这个负数加122,即(N+122),其中N为负数。

把xqk解密

(x)120-4(q)111-9(k)107-6

变为the

(4)设置加密方法voidset()

由键盘输入,得到加密字节数和加密字符串,进行加密方法的设置,主要由输出输入语句组成,目的是为了方便人机交流。

(5)加密方法用结构表示

structpassword/*加密方法*/

{

charps[10];

/*加密字符串*/

longwd;

/*加密的字节数*/

};

(6)文件比较voidcmptxt()

从source文件和recall文件中读取字符并进行比较,看加解密是否成功。

但由于已经在屏幕上显示原文件和解密文件,故不调用。

(7)显示菜单:

******************

*1.设置加密方法*

*2.加密*

*3.解密*

*4.显示文件*

*5.退出  *

三、概要设计

1.加密程序的设计:

开始,以输出方式打开加密文件,以输入方式打开原始文件,判断文件是否为空,若为空,对字符串进行加密:

定义for循环,判断i值是否小于字符串的长度,是则进行加密运算,即将字符所对应的ASCALL码加上加密字符串所对应的数字减去48,得到的就是加密后的字符,如果围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(即N%122),将加密后的文字写入加密文件,关闭打开的两个文件,屏幕显示加密成功。

如果文件不为空,则对文件中字符加密,加密过程与上述加密过程相似。

2.解密程序的设计:

开始,以输出方式打开解密密文件,以输入方式打开加密文件,对加密后的文件中的字符串进行解密:

定义for循环,判断i值是否小于字符串的长度,是则进行加密运算,即将字符所对应的ASCALL码减去加密字符串所对应的数字加上48,得到的就是解密后的字符,若执行减法后得到一个负数,则把这个负数加122,即(N+122),其中N为负数。

将解密后的文字写入解密文件,关闭打开的两个文件,屏幕显示解密成功。

3.显示程序的设计:

以输入方式打开原始文件,加密文件,解密文件,将文件中进行的字符串读入到屏幕上,方便读者进行比较。

4.主函数的设计:

选用switch语句,从键盘读入字符以选择调用函数,实现操作。

四、源程序

#include<

string.h>

stdlib.h>

#include<

stdio.h>

structpassword/*加密方法结构变量*/

charps[10];

/*密字符串*/

longwd;

/*加密的字节数*/

structpasswordpassword;

chars[100];

voidset()//加密方法设置函数

printf("

\n输入加密字符串:

"

);

scanf("

%s"

password.ps);

\n输入加密字节数:

%ld"

&

password.wd);

getchar();

system("

pause"

/*系统函数,按任意键继续,使界面整洁*/

}

voidPrinttxt()/*显示显示原始文件和解密文件函数*/

/*以读方式打开文件*/

FILE*source=fopen("

source.txt"

"

rt"

FILE*result=fopen("

result.txt"

r"

FILE*recall=fopen("

recall.txt"

charc;

//临时字符存储变量

if(source==NULL)

{

printf("

无法打开source.txt\n"

exit(0);

}

if(result==NULL)

无法打开result.txt\n"

if(recall==NULL)

无法打开recall.txt\n"

c=fgetc(source);

//先从原始文件读出一个字符,若不是文件结尾,则文件容非空

if(c==EOF)//文件容为空,输出加密字符

{

\n加密字符:

%s\n"

s);

}

else//文件非空,输出原始文件

\n原始文件:

%c"

c);

while((c=fgetc(source))!

=EOF)

printf("

\n"

\n加密文件:

while((c=fgetc(result))!

=EOF)//文件非空,输出加密文件

\n解密文件:

while((c=fgetc(recall))!

=EOF)//文件非空,输出解密文件

fclose(source);

fclose(result);

fclose(recall);

}

voidencode()/*加密函数*/

intm,n=strlen(password.ps),i,flag=1;

/m存储加密字符长度,n存储加密字符串长度,i为临时变量

charN,w;

charc,C;

wt"

flag=0;

if(flag=1)C=fgetc(source);

//得到一个文件容

if(flag==0||C==EOF)//判断文件是否为空,为空的话,对输入字符加密

请输入要加密的字符串:

scanf("

m=strlen(s);

fprintf(source,"

for(i=0;

i<

m;

i++)

{

staticinta=0;

if(a<

password.wd)

{

N=s[i]+password.ps[a%n]-48;

if(N>

122)

{

N=N%122;

/*模运算*/

}

fputc(N,result);

a++;

}

else

fputc(s[i],result);

}

else//文件非空,对文件加密

w=C+password.ps[0%n]-48;

fputc(w,result);

for(i=0;

(c=fgetc(source))!

=EOF;

staticinta=1;

N=c+password.ps[a%n]-48;

}

elsefputc(N,result);

\n加密成功!

voiddecode()/*解密函数*/

FILE*recall=fopen("

FILE*result=fopen("

charc,N;

intn=strlen(password.ps),i;

//n存储加密字符串长度,i为临时变量

for(i=0;

(c=fgetc(result))!

i++)//对加密文件进行译码

staticinta=0;

if(a<

N=c-(password.ps[a%n]-48);

if(N<

0)

N=(N+122)%122;

fputc(N,recall);

if(N==0)

fputc('

z'

recall);

//将解密结果输出至recall文件

else

fputc(N,recall);

a++;

elsefputc(c,recall);

\n解密成功!

voidcmptxt()/*比较解密文件和原始文件的一致性,一致输出原字符,不一致输出'

_'

*///在程序中没有调用

sourse.txt"

charc,d;

不存在source.txt文件\n"

exit(0);

不存在recall.txt文件\n"

d=fgetc(recall);

if(c==EOF)

读文件错误!

!

if(d==EOF)

文件比较:

if(c==d)

elseprintf("

_"

while((c=fgetc(source))!

=EOF&

&

(c=fgetc(source))!

=EOF)//文件非空调用判断

if(c==d)//比较,输出字符

{

}

voidmenu()//菜单函数

\n****文件加解密****"

\n******************\n"

*1.设置加密方法*\n"

\n"

*2.加密文件*\n"

*3.解密文件*\n"

*4.显示文件*\n"

*5.退出*\n"

******************\n"

请选择:

voidcreat()//创建文件

{

FILE*f1=fopen("

FILE*f2=fopen("

FILE*f3=fopen("

fclose(f1);

fclose(f2);

fclose(f3);

voidmain()//主函数,进行选择

inta=0;

menu();

while(a!

=5)

%d"

a);

switch(a)

case1:

creat();

set();

system("

cls"

menu();

break;

case2:

encode();

case3:

decode();

case4:

Printtxt();

case5:

\n结束!

\n\n"

default:

\n请再次输入!

五、测试数据及其结果分析

选择1设置加密方法,加密字符串496,为前五位字符加密

从键盘读入要加密的字符串文件并加密

解密

显示加密文件与解密文件

七、课程设计总结

遇到的问题:

1,在解密文件时会遇到将未被加密的字符进行解密,以致出现错误的解密文件。

后来发现解密函数中有一句的文件字符写入写错了,从result文件中读出即可解决。

2,程序不能给长文件加密,后来计算需加密文件长度,对加密字符串长度取余,即可实现重复的加密,实现全文加密。

感想:

虽然老师什么都不讲,但是自己动手查资料,讨论语句的功能还是很有意思的,也更加巩固了c语言知识,能灵活的运用知识了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2