云南大学软件学院数据结构实验三实验报告——文件加密译码器.doc

上传人:laozhun 文档编号:2396527 上传时间:2023-02-17 格式:DOC 页数:17 大小:329.50KB
返回 下载 相关 举报
云南大学软件学院数据结构实验三实验报告——文件加密译码器.doc_第1页
第1页 / 共17页
云南大学软件学院数据结构实验三实验报告——文件加密译码器.doc_第2页
第2页 / 共17页
云南大学软件学院数据结构实验三实验报告——文件加密译码器.doc_第3页
第3页 / 共17页
云南大学软件学院数据结构实验三实验报告——文件加密译码器.doc_第4页
第4页 / 共17页
云南大学软件学院数据结构实验三实验报告——文件加密译码器.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《云南大学软件学院数据结构实验三实验报告——文件加密译码器.doc》由会员分享,可在线阅读,更多相关《云南大学软件学院数据结构实验三实验报告——文件加密译码器.doc(17页珍藏版)》请在三一办公上搜索。

1、云南大学软件学院 数据结构实验报告 (本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助) 实验难度: A B C 序号学号姓名成绩123指导教师 (签名)学期: 任课教师: 实验题目:实验三 栈和队列及其应用小 组 长: 联系电话: 电子邮件:完成提交时间:年月日云南大学软件学院2010学年 秋季 学期数据结构实验成绩考核表学号: 姓名: 本人承担角色:课题分析,算法设计,程序编写,后期调试,完成实验报告 评分项目评分指标分值得分实验构思(10%)1. 实验目的明确52. 实验内容理解透彻、对实验所涉及到的知识点分析到位5实验设计(15%)1. 有对基本数据结构的抽

2、象数据类型定义52. 实验方案设计完整,数据结构、算法选择合理 53.算法结构和程序功能模块之间逻辑清晰、有相应的流程图5实验实现(25%)1. 代码编写规范、风格统一、注释清楚易读 52. 程序运行正常,测试结果正确153. 界面友好、易于操作、有较强的容错性5实验报告撰写(10%)1. 内容详实无缺漏,文字流畅、图表清楚52. 实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考5个人工作量(30%)1. 个人完成工作量152. 个人技术水平103. 团队合作精神5实验运作(10%)1. 有一定用户群52. 应用前景分析5综合得分: (满分100分)指导教师

3、: 年 月 日(注:此表在难度为C时使用,每个成员一份。)云南大学软件学院2010学年 秋季 学期数据结构实验成绩考核表学号: 姓名: 本人承担角色: 课题分析,算法设计,后期调试 评分项目评分指标分值得分实验构思(10%)1. 实验目的明确52. 实验内容理解透彻、对实验所涉及到的知识点分析到位5实验设计(15%)1. 有对基本数据结构的抽象数据类型定义52. 实验方案设计完整,数据结构、算法选择合理 53.算法结构和程序功能模块之间逻辑清晰、有相应的流程图5实验实现(25%)1. 代码编写规范、风格统一、注释清楚易读 52. 程序运行正常,测试结果正确153. 界面友好、易于操作、有较强的

4、容错性5实验报告撰写(10%)1. 内容详实无缺漏,文字流畅、图表清楚52. 实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考5个人工作量(30%)1. 个人完成工作量152. 个人技术水平103. 团队合作精神5实验运作(10%)1. 有一定用户群52. 应用前景分析5综合得分: (满分100分)指导教师: 年 月 日(注:此表在难度为C时使用,每个成员一份。)(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(1

5、0%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)本次实验的目的在于使我们深入了解栈和队列的特性,以便在实际问题背景下灵活运用它们;同时还将巩固对这两种结构构造方法的理解。核心算法:加密与解密算法。加密算法:将文件各位取反,再加上密码值。构成密文。解密算法:将密文减去密码值,在按位取反,获得明文。二、【实验设计(Design)】(20%)(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)定义一个类MyClass:class MyClass char *buffer; /定义

6、存储文件的缓存 char nameMAX_PATH; /来存储用户输入的文件名char pass16; /来存储用户输入的密码DWORD size, psdlen; /定义变量存储文件的长度,密码的长度DWORD GetSize(); /检查文件的长度void EncAlg(DWORD bsize); /声明加密函数void DecAlg(DWORD bsize); /声明解密函数public:MyClass(char *, char *); /声明构造函数MyClass(); /声明析构函数FILE *fp; /指向文件流的指针BOOL Ecpenc(); /加密算法BOOL Ecpdec(

7、); /解密算法;三、【实现描述(Implement)】(30%)(本部分应包括:抽象数据类型具体实现的函数原型说明、 关键操作实现的伪码算法、 函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。)四、【测试结果(Testing)】(10%)(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析总结)测试数据,文本文档1.txt,位于程序根目录内含有字符串:hello,world以密码123进行加密后显示密文为:-犁-以密码123解密后显示为hello,world以密码12345解密后显示为helil-uipoe测试功能

8、成功!四、【实验总结】(10%)(本部分应包括:自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得)这次和我们小组完成这个文件加密解密程序,大家分工协作,配合默契。我在这个小组中参与了课题分析,算法设计,后期测试。独立完成了程序代码的编写,实验报告的编写。 通过这次试验,我们了解了,如何对一个文件通过c+语言进行操作,在使用文件流的时候应该注意哪些要素,成功解决了有些情况下密码错误也能正常解密的BUG五、【项目运作描述(Operate)】(10%)(本部分应包括:项目的成本效益分析,应用效果等的分析。)1. 本程序运行的环境为32位MS

9、-DOS操作系统或者Windows NT环境下的CMD命令行模式。2. 进入程序后的开始界面:3. 输入用户需要加密的文件路径及文件名,在当前目录下直接输入文件名即可:这是用来测试的文本文件,内含有内容hello,world输入文件名:1.txt4. 设定密码:5. 此时系统会弹出确认菜单,用户可以查看之前的输入是否正确:6. 如果用户检查出错误则键入n进行重新输入,如果用户确认正确则键入y确认,此时系统会弹出操作菜单,用户可以自行选择进行什么操作(加密文件,解密文件,退出)7. 选择1号功能将制定的文件加密,当加密成功后系统会有如下提示:8. 此时被加密文件显示为密文:当用户需要解密时,同样

10、进行上述操作,在正确输入密码且选择解密功能后,系统显示为:被解密文件显示为正常的人类文字:9 如若用户输入了错误的密码并且选择解密功能的话,文件会被进一步加密,将无法读出被保护内容。六、【代码】(10%)(本部分应包括:完整的代码及充分的注释。 注意纸质的实验报告无需包括此部分。格式统一为,字体: Georgia , 行距: 固定行距12,字号: 小五)#include #include #include #include #include int psd1;class MyClass char *buffer;char nameMAX_PATH;char pass16;DWORD size,

11、 psdlen;DWORD GetSize();void EncAlg(DWORD bsize);void DecAlg(DWORD bsize);public:MyClass(char *, char *);MyClass();FILE *fp;BOOL Ecpenc();BOOL Ecpdec();int TransPassword(char * transp)int psd = 0,i; for(i=0;i=15;i+)psd = psd * 10 + (int)(transp + i * sizeof(char);transp;return psd;int main()char nam

12、eMAX_PATH;char psd16;char c; std:cout Welcome to use EasyEncryption v1.0n;std:cout name;std:cout psd;psd1 = TransPassword(psd);MyClass ecp(name,psd);dostd:cout What can we do for you?;std:cout n1 - To encipher the file.;std:cout n2 - To decipher the file.;std:cout n3 - Exit this program;std:cout c;w

13、hile( c 3 );switch(c)case 1:std:cout nEnciphering,please wait.n;if( ecp.Ecpenc() )std:cout Encipher succeeded.n;elsestd:cout ERROR: Cannot Encipher the file.n;break;case 2:std:cout nDeciphering,please wait.n;if( ecp.Ecpdec() )std:cout Decipher succeeded.n;elsestd:cout ERROR:Cannot Decipher the file.

14、n;break;default:return 0; std:cout nPlease enter the ENTER key to exit this program.n;getchar();getchar();return 0;MyClass:MyClass(char *fname, char *psd)strcpy(name,fname);strcpy(pass,psd);size = GetSize();char ch;if(size = 0)std:cout ERROR: Cannot find the file or unknow error occured. n;std:cout

15、Press the ENTER key to exit. n;getchar();getchar();exit(1); psdlen = strlen(pass); std:cout +-confirmation table-+n;std:cout | File name: name n;std:cout | Lengh of file: size n;std:cout | Lengh of Password: psdlen n;std:cout +-+n;confirmation:std:cout ch;if (ch = y | ch = Y)goto next;else if (ch =

16、n|ch = N)std:cout Please try again.n;std:cout Press any key to exit.n;getchar();getchar();exit(1); elsestd:cout Invalid enter, try again.n;goto confirmation;next:std:cout 65535 )fread(buffer, 1, 65535, fp); DecAlg(65535);fseek(fp, size - t_size, SEEK_SET);fwrite(buffer,1 , 65535, fp);t_size -= 0x400

17、0;fseek(fp, size - t_size, SEEK_SET);bsize = fread(buffer,1 , 65535, fp);DecAlg(bsize);fseek(fp, size - t_size, SEEK_SET);fwrite(buffer, 1, bsize, fp);return TRUE;BOOL MyClass:Ecpenc () DWORD t_size = size;DWORD bsize;DWORD offset = 0;while ( t_size 65535 )fread(buffer, 1, 65535, fp);EncAlg(65535);f

18、seek(fp, size - t_size, SEEK_SET);fwrite(buffer,1 , 65535, fp);t_size -= 0x4000;fseek(fp, size - t_size, SEEK_SET);bsize = fread(buffer,1 , 65535, fp);EncAlg(bsize);fseek(fp, size - t_size, SEEK_SET);fwrite(buffer, 1, bsize, fp);return TRUE;DWORD MyClass:GetSize () WIN32_FILE_ATTRIBUTE_DATA attr;if(

19、 GetFileAttributesEx(name,GetFileExInfoStandard,&attr) )return attr.nFileSizeLow;return 0;void MyClass:EncAlg(DWORD bsize)char *p;for ( p = buffer; p buffer + bsize; p+ )*p = (*p pass (p - buffer) % psdlen )-psd1;void MyClass:DecAlg (DWORD bsize) char *p;for ( p = buffer; p buffer + bsize; p+ )*p = (*p+psd1) pass (p - buffer) % psdlen ;

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号