c语言程序设计文件加密解密Word下载.docx
- 文档编号:22073231
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:23
- 大小:22.35KB
c语言程序设计文件加密解密Word下载.docx
《c语言程序设计文件加密解密Word下载.docx》由会员分享,可在线阅读,更多相关《c语言程序设计文件加密解密Word下载.docx(23页珍藏版)》请在冰豆网上搜索。
成绩的评定
根据学生平时的上机出勤情况、为上机所作的准备情况、上机时的表现、程序的完成情况、报告的完成情况
、验收答辩时的表现等综合打分。
等级为:
优秀、良好、中等、及格、不及格。
附4:
课程设计报告具体内容要求
学生管理系统
(题目格式:
宋体,3号,加粗,居中对齐)
一、课题内容和要求(格式:
宋体,4号,加粗,两端对齐)
该部分可参考前面给出的问题描述再加以细化一些
(正文格式:
宋体,小4号,不加粗,两端对齐,1.5倍行距)
二、需求分析(格式:
在该部分中叙述每个模块的功能要求
概要设计(格式:
在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如
果指定存储结构请写出该存储结构的定义,如果用面向对象的方法,应该给出类中成员变量和成员函数原型
声明)。
四、源程序代码(格式:
各个算法实现的源程序(可以是一组源程序,每个功能模块采用不同的函数实现),源程序要按照写程序的
规则来编写。
要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
宋体,小4号,不加粗,两端对齐)
五、测试数据及其结果分析(格式:
六、调试过程中的问题(格式:
每个模块设计和调试时存在问题的思考(问题是哪些?
问题如何解决?
),以及算法的改进设想。
七、课程设计总结(格式:
总结可以包括:
程序设计过程的收获、遇到的问题,遇到问题解决问题过程的思考、程序调试能力的思考,
对该课程组织和考核方式的建议等。
原始数据文件(stud.dat)
课题内容和要求
1.编写一个对字符文件(由数字或字母组成)进行加密解密的程序。
可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。
例如加密时可以将选取内容的每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(既N%122)。
解密与加密的顺序相反。
2、部分要求
(1)从键盘输入要进行加密的一行字符串或者需要加密的文件名。
(2)显示菜单:
*********************************
1.设置加密方法
2.加密
3.解密
4.退出
(3)选择菜单,进行相应的操作。
加密方法是设置一加密字符串以及对文件的哪些部分进行加密;
加密是将原始文件加密并保存到文件中;
解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性;
显示是将文件在屏幕上显示出来,供人工校对。
(4)定义原始文件sourse.txt、加密文件result.txt和还原文件recall.txt
3、其他要求
(1)变量、函数命名符合规范。
(2)注释详细:
每个变量都要求有注释说明用途;
函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;
关键的语句段要求有注释解释。
(3)程序的层次清晰,可读性强。
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)显示菜单:
(6)加密方法用结构表示
structpassword/*加密方法*/
{
charps[10];
/*加密字符串*/
longwd;
/*加密的字节数*/
};
概要设计
1.加密程序的设计:
开始,以输出方式打开加密文件,以输入方式打开原始文件,判断文件是否为空,若为空,对字符串进行加密:
定义for循环,判断i值是否小于字符串的长度,是则进行加密运算,即将字符所对应的ASCALL码加上加密字符串所对应的数字减去48,得到的就是加密后的字符,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(即N%122),将加密后的文字写入加密文件,关闭打开的两个文件,屏幕显示加密成功。
如果文件不为空,则对文件中字符加密,加密过程与上述加密过程相似。
2.解密程序的设计:
开始,以输出方式打开解密密文件,以输入方式打开加密文件,对加密后的文件中的字符串进行解密:
定义for循环,判断i值是否小于字符串的长度,是则进行加密运算,即将字符所对应的ASCALL码减去加密字符串所对应的数字加上48,得到的就是解密后的字符,若执行减法后得到一个负数,则把这个负数加122,即(N+122),其中N为负数。
将解密后的文字写入解密文件,关闭打开的两个文件,屏幕显示解密成功。
3.显示程序的设计:
以输入方式打开原始文件,加密文件,解密文件,将文件中进行的字符串读入到屏幕上,方便读者进行比较。
编译连接后得到可执行文件(B10080128—加密解密处理.exp)
源程序代码
#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)//文件存在性判断
{
不存在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)//文件非空调用判断
\n"
\n解密文件:
while((c=fgetc(result))!
=EOF)//文件非空,输出解密文件
while((c=fgetc(recall))!
/*下面是文件关闭操作*/
fclose(source);
//fclose(result);
fclose(recall);
}
voidencode()/*加密*/
intm,n=strlen(password.ps),i,flag=1;
//m存储加密字符长度,n存储加密字符串,i为临时变量
charN,w;
charc,C;
wt"
//以写方式打开result。
txt文件
sourse.txt"
//以写方式打开source。
if(result==NULL)//文件非空容错处理
}//ofstreamout("
if(source==NULL)//文件非空容错处理
flag=0;
//ifstreamfw("
//ifstreamfs(s,ios:
:
nocreate);
if(flag=1)C=fgetc(source);
//先得到一个文件内容
if(flag==0||C==EOF)//判断文件是否为空,为空的话,对输入字符加密
请输入要加密的字符串:
m=strlen(s);
/*对输入的字符串加密*/
fprintf(source,"
//将输入字符输出至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);
//将加密内容输出入result中
a++;
elsefputc(s[i],result);
//将加密内容输出入result中
else//文件非空,对文件加密
w=C+password.ps[0%n]-48;
fputc(w,result);
//将加密结果输出至result文件中
for(i=0;
(c=fgetc(source))!
=EOF;
staticinta=1;
N=c+password.ps[a%n]-48;
/*模运算*/
//out.put(N);
elsefputc(N,result);
\n加密成功!
//关闭文件
fclose(result);
voiddecode()/*解密*/
FILE*recall=fopen("
/*以写方式打开文件*/
FILE*result=fopen("
charc,N;
//临时变量
intn=strlen(password.ps),i;
//n存储加密字符串长度,i为临时变量
//文件存在性判断
if(recall==NULL)
(c=fgetc(result))!
i++)//对加密文件进行译码
N=c-(password.ps[a%n]-48);
if(N<
0)
N=(N+122)%122;
fputc(N,recall);
else
if(N==0)fputc('
z'
recall);
//将解密结果输出至recall文件
elsefputc(N,recall);
elsefputc(N,recall);
//
\n解密成功!
voidcmptxt()/*比较解密文件和原始文件的一致性,一致输出原字符,不一致输出'
-'
*///在程序中没有调用
//FILE*result=fopen("
charc,d;
/*
}*/
d=fgetc(recall);
//先从解密文件读出一个字符,若不是文件结尾,则文件内容非空
读文件错误!
!
if(d==EOF)//文件内容为空,输出加密字符
文件比较:
if(c==d)
elseprintf("
-"
=EOF&
&
(c=fgetc(source))!
{
}
voidmenu()//主菜单
\n********************\n"
1.设置加密方法\n"
2.加密\n"
3.解密\n"
4.显示文件\n"
5.退出\n"
请选择:
voidmain()
inta=0;
FILE*f1=fopen("
//创建文件
FILE*f2=fopen("
FILE*f3=fopen("
fclose(f1);
fclose(f2);
fclose(f3);
//关闭文件*/
menu();
while(a!
=5)
%d"
a);
switch(a)
case1:
set();
//调用设置加密方法函数
system("
cls"
//清楚屏幕上的字符,是屏幕更整洁
menu();
break;
case2:
encode();
//调用加密函数
system("
case3:
decode();
//调用解密函数
case4:
printtxt();
//显示原始文件与目标文件
case5:
\n谢谢使用!
\n\n"
default:
printf("
\n输入错误请再次输入\n"
六、测试数据及其结果分析
测试数据记录:
请输入需要加密的内容:
the
***************
4.显示文件
5.退出
****************
请选择:
1
输入加密字符串:
496
输入加密字节数:
3
请按任意键继续......
2
加密成功!
解密成功!
4
原始文件:
加密文件:
xqk
解密文件:
原文件为空时:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 文件 加密 解密