当前位置:文档之家› c语言程序设计文件加密解密

c语言程序设计文件加密解密

程序报告设计题目:加密解密处理程序设计报告的电子文档(B10080128—程序设计.doc )一.老师对作业要求。

1:对学生课程设计两周的纪律及提交内容的要求:(1)规定上机的时间内不得无故缺勤,有事需要向指导老师书面请假;(2)上机时禁止玩游戏,屡教不改者,实习成绩可为不及格;(3)每人手头准备一至两本C/C++的有关工具书,上机前作好充分的准备,包括事先写好主要算法的程序代码以保证充分利用上机的时间调试程序;(4)同组可以讨论思路,但是程序要自己完成,不可抄袭,若完全抄袭别人的,实习成绩可为不及格;(5)实习的最后阶段认真完成实习报告的电子文档。

报告内容不得少于15页。

(6)每个学生最后提交的材料:压缩文件一个,起名为:学号名_题目名.rar(如:B06020127_学生管理系统.rar)。

该压缩文件中包含下列几个文件:程序设计报告的电子文档(起名为:学号_程序设计.doc)、源程序文件(起名为:学号名_题目名.cpp,如:B06020127_学生管理系统.cpp)、原始数据文件(如:stud.dat)、编译链接后得到的可执行文件(起名为:学号名_题目名.exe)(7)请同学独立完成报告,若发现两份报告一模一样,则两人都按不及格论处,请各位同学珍惜自己的版权,也请指导老师严格把关。

附2:上机时间:每天上午8:00——11:20附3:成绩的评定根据学生平时的上机出勤情况、为上机所作的准备情况、上机时的表现、程序的完成情况、报告的完成情况、验收答辩时的表现等综合打分。

等级为:优秀、良好、中等、及格、不及格。

附4:课程设计报告具体内容要求学生管理系统(题目格式:宋体,3号,加粗,居中对齐)一、课题内容和要求(格式:宋体,4号,加粗,两端对齐)该部分可参考前面给出的问题描述再加以细化一些(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)二、需求分析(格式:宋体,4号,加粗,两端对齐)在该部分中叙述每个模块的功能要求(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)概要设计(格式:宋体,4号,加粗,两端对齐)在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义,如果用面向对象的方法,应该给出类中成员变量和成员函数原型声明)。

(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)四、源程序代码(格式:宋体,4号,加粗,两端对齐)各个算法实现的源程序(可以是一组源程序,每个功能模块采用不同的函数实现),源程序要按照写程序的规则来编写。

要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。

(正文格式:宋体,小4号,不加粗,两端对齐)五、测试数据及其结果分析(格式:宋体,4号,加粗,两端对齐)(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)六、调试过程中的问题(格式:宋体,4号,加粗,两端对齐)每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),以及算法的改进设想。

(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)七、课程设计总结(格式:宋体,4号,加粗,两端对齐)总结可以包括: 程序设计过程的收获、遇到的问题,遇到问题解决问题过程的思考、程序调试能力的思考,对该课程组织和考核方式的建议等。

(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)原始数据文件(stud.dat)课题内容和要求1.编写一个对字符文件(由数字或字母组成)进行加密解密的程序。

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

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

解密与加密的顺序相反。

2、部分要求(1)从键盘输入要进行加密的一行字符串或者需要加密的文件名。

(2)显示菜单:*********************************1.设置加密方法2.加密3.解密4.退出*********************************(3)选择菜单,进行相应的操作。

加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性;显示是将文件在屏幕上显示出来,供人工校对。

(4)定义原始文件sourse.txt、加密文件result.txt和还原文件recall.txt3、其他要求(1)变量、函数命名符合规范。

(2)注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。

(3)程序的层次清晰,可读性强。

4、需要掌握的知识(1)如何读写文件(2)如何对字符进行加减操作,并保证加减后的数值处于某一范围之内(模运算)(3)了解加解密的基本原理需求分析模块分析:(1)在屏幕上显示文件 void printtxt()用于将原始文件sourse.txt,加密文件result.txt,解密文件recall.txt,的内容显示在屏幕上,方便检验程序是否正确执行。

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

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

加密时,每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(即N%122).例如:加密the(t)116+4,(h)104+9,(e)101+6变为xqk(3)解密void decode()对加密后的result.txt进行解密,并将解密后的内容写入recall.txt 文件中。

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

例如:把xqk解密(x) 120-4 (q)111-9 (k) 107-6变为 the(4)设置加密方法void set()由键盘输入,进行加密方法的设置,主要由输出输入语句组成,目的是为了方便人机交流。

(5)显示菜单:*********************************1.设置加密方法2.加密3.解密4.退出*********************************(6)加密方法用结构表示struct password /*加密方法*/{char ps[10]; /*加密字符串*/long wd; /*加密的字节数*/};概要设计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>#include<stdlib.h>#include <stdio.h>struct password /*加密方法*/{char ps[10]; /*加密字符串*/long wd; /*加密的字节数*/};struct password password; //定义一个加密方法结构变量char s[100];void set() //加密方法设置函数{printf("\n输入加密字符串:");scanf("%s",password.ps);printf("\n输入加密字节数:");scanf("%ld",&password.wd);getchar();system("pause"); /*按任意键继续,使界面整洁*/}void printtxt() /*显示显示原始文件和解密文件函数*/ {/*以读方式打开文件*/FILE *source = fopen("source.txt","rt"); //打开原始文件FILE *result = fopen("result.txt","r");FILE *recall = fopen("recall.txt","rt"); //打开解密文件char c; //临时字符存储变量if(source == NULL ) //文件存在性判断{printf("不存在 source.txt 文件\n");exit(0);}if(result == NULL ){printf("不存在 result.txt 文件\n");exit(0);}if(recall == NULL ) //文件存在性判断{printf("不存在 recall.txt 文件\n");exit(0);}c = fgetc(source); //先从原始文件读出一个字符,若不是文件结尾,则文件内容非空if(c ==EOF) //文件内容为空,输出加密字符{printf("\n加密字符:");printf("%s\n",s);}else //文件非空,输出原始文件{printf("\n原始文件:");printf("%c",c);while((c=fgetc(source)) != EOF) //文件非空调用判断printf("%c",c);}printf("\n");printf("\n解密文件:");while((c=fgetc(result)) != EOF) //文件非空,输出解密文件printf("%c",c);printf("\n");printf("\n");printf("\n解密文件:");while((c=fgetc(recall)) != EOF) //文件非空,输出解密文件printf("%c",c);printf("\n");/*下面是文件关闭操作*/fclose(source);//fclose(result);fclose(recall);system("pause");}void encode() /*加密*/{int m,n=strlen(password.ps),i,flag = 1; //m存储加密字符长度 ,n存储加密字符串 ,i 为临时变量char N,w;char c,C; //临时字符存储变量FILE *result = fopen("result.txt","wt"); //以写方式打开result。

相关主题