《简易文件加密解密》.doc

上传人:教**** 文档编号:88909989 上传时间:2023-05-04 格式:DOC 页数:21 大小:585KB
返回 下载 相关 举报
《简易文件加密解密》.doc_第1页
第1页 / 共21页
《简易文件加密解密》.doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《《简易文件加密解密》.doc》由会员分享,可在线阅读,更多相关《《简易文件加密解密》.doc(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、常熟理工学院课程设计报告 课程设计报告课程 微机原理课程设计 题目 简易文件加密解密 系 别 物理与电子工程学院 年 级 08级 专 业 电子信息工程 班 级 3 学 号 160408321 学生姓名 花花 指导教师 马玉龙 职 称 助教 设计时间 2011.5.30 2011.6.3 19目录第一章 绪论1第二章 分析与设计22.1 题目22.2 要求22.3 方案设计与论证22.3.1 整体设计思路22.3.2 方案选择22.4结构框图等设计步骤3第三章 实验程序及分析53.1 宏定义53.2 加密解密的选择53.3加密和解密6第四章 实验结果及问题处理84.1 实验结果84.2出现的问题

2、以及解决的方案124.2.1 文件读写操作问题124.2.2 读入缓冲区的大小问题124.2.3 文件结束标志12第五章 总结与体会13参考文献14附录15第一章 绪论随着计算机硬件的发展,微机系统的功能越来越强,而且计算机的程序设计语言也经过了一个发展的过程。从最基本的机器语言到汇编语言,并到高级的智能化语言,如visual C+、visual Basic等,不断前进。汇编语言(Assembly Language)是面向机器的程序设计语言。在汇编语合中,用助记符( Memoni )代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器

3、语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语 言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编

4、器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。对给定的文件进行加密是当今计算机科学中的一个非常热门话题。在本课程设计中,目的是给给定的文件进行加密和解密,加密方法有:文件里文本的二进制与10101010B作求和,解密则相应的与10101010B相减。课设只是把所学的知识加以应用,不能轻视题目的简单,我们要借此机会,加强汇编语言的学习,并加深自己的知识。在设计中,程序应用了BIOS中一些系统中断,设计了人性化的界面,这些是自学的汇编知识并加以

5、应用,当然也有很多DOS系统的功能调用。总之,自己结合平时所学和最近的自学,认真的完成课题,并很好的实现了相应的功能。第二章 分析与设计2.1 题目简易加密解密程序2.2 要求编写一个程序能够对某个文件进行简单加密和解密,加密过程要求将文件中所有数据读出,然后将每个字节的读出数据和10101010B作求和运算,实现加密,需要解密时用相应的求差运算。要求有提示信息。例如:INPUT THE FILE NAME NEED TO HANDLE:2.3 方案设计与论证2.3.1 整体设计思路1. 考虑到要读文件内容,所以要先打开文件;2. 判断是要加密还是解密;3. 经行加密(解密)操作。4. 关闭文

6、件。2.3.2 方案选择1对于加密(解密),我们有两种方案:(1)把文件内容加密(解密)之后替换原来内容为加密(解密)内容;(2)把文件内容加密(解密)之后存在缓存区,删除原来文件并新建一个和原来名字一样的文件,存入加密(解密)数据。对于方案(2)在源文件存入缓冲区之后,源文件可以被删除,但是在创建新的文件的时候,实践的时候无法创建。然后再考虑到,这种方案比较繁琐,错误的几率比较大。方案(1)在同一个文件中进行读写,用加密数据将原来的数据覆盖,数据安全性提高的同时,程序设计不再繁琐,所以我们选择方案(1)。2对于怎么读文件数据,我们有三种方案:(1)利用汇编语言读文件功能调用,将文件数据分51

7、2个字节分批读入内存,加密(解密)后返回给文件;(2)利用汇编语言读文件功能调用,将文件数据每次读一个字节,加密(解密)后返回文件;(3)利用汇编语言读文件功能调用,将文件数据分读8个字节分批读入内存,加密(解密)后返回文件。从理论上讲,上述方案都可行,但是在实际操作中,我们发现方案(1)(2),可能由于cup处理的问题,在运行中程序都被打断,达不到预期效果,尤其是方案(1)。最终我们选择方案(2),因为在后期的编写中我们发现方案(2)更加简便,能够避免前面方案出现的问题,从而简化操作流程。2.4结构框图等设计步骤如图1为本程序的汇编流程图,由于程序对文件的操作很多,所以编程过程中用到了很多功

8、能调用。开始 获取文件名(0AH功能调用)打开文件(3DH功能调用)获取选择(01H功能调用)创建新文件(3CH功能调用)读文件(3FH功能调用)写入新文件(40H功能调用)加密或解密字符N文件结束?Y关闭两个文件(3EH功能调用)删除原文件(41H功能调用)重命名新文件(56H功能调用)结束图 1 汇编思路流程图第三章 实验程序及分析3.1 宏定义1,输出字符串PRINTMACROMSGPUSH DXPUSH AXLEA DX,MSGMOV AH,09HINT 21HPOP AXPOP DXENDM这是一个简单的宏定义,作用为想屏幕输出一个字符串,入口参数为字符串的首地址。当然,为了避免AX

9、、DX寄存器的有用数据丢失,进行压栈和出栈操作。2,输入单字符GETSMACRO ADDR PUSH DXPUSH AXLEA DX,ADDRMOV AH,0AHINT 21HPOP AXPOP DXENDM这个宏定义可以用于:,获取输入的加密还是解密的信息,给用户最后的提示信息后,按任意键退出。(详见附录)3.2 加密解密的选择PRINT CHOSEMOV AH,01HINT 21HCMP AL,31HJZ MODE1CMP AL,32HJZ MODE2JMP REDY_TO_QUITMODE1:MOV AL,01HMOV MODE,ALJMP BEGINMODE2:MOV AL,02HMO

10、V MODE,ALJMP BEGIN其中MODE是是已定义的一个字节的内存,存放用户输入的加密还是解密的信息,MODE=01H,加密;MODE=02H,解密。(其实加密解密无所谓,因为它们是反过程,完全可以反过来理解,编写代码是没有必要搞得太清楚。)3.3加密和解密READ_FILE:MOV BX,F1_NOLEA DX,BUFFERMOV CX,1MOV AH,3FH INT 21HJNC RED_OKPRINT NOTREADJMP REDY_TO_QUITRED_OK:ENCODE_DECODE:TEST AX,0FFFFHJZ CODE_OKMOV AL,BUFFERMOV AH,MO

11、DECMP AH,01HJNZ DEADD AL,0AAHJMP OKDE:SUB AL,0AAHOK:MOV BUFFER,ALMOV BX,F2_NOMOV CX,1LEA DX,BUFFERMOV AH,40HINT 21HJMP READ_FILE思想是这样的:每次从F1(需要加密的文件),读取一个字节。再通过AX判断文件是否结束,如果结束,则编码结束。当然了,不会第一次读文件就结束,除非时空文件,不过我猜就算是空文件也因该有一些存放数据吧,比如日期之类的。如果文件没有结束,则读出一个字节,通过MODE中的值判断进行加密或解密,完成后,写入新文件。随后读取下一个字节第四章 实验结果及问

12、题处理4.1 实验结果如图2为程序界面,图3显示不能打开文件时的提示信息,图4 选择加密还是解密,图5完成加密,准备退出,图6图4.6给了一些文件加密前和加密后后的结果展示,解密后的文件和加密前的一样。本程序理论上对计算机二进制文件都可以加密和解密,图中只给出了对TXT和JPG的加解密。图2 程序界面图3 不能打开文件图4 选择加密还是解密图5 加密完成,准备退出图6 TXT加密之前图7 TXT加密之后图8 JPG图片加密前图9JPG图片加密后4.2出现的问题以及解决的方案 4.2.1 文件读写操作问题一开始我们直接对文件进行读写操作,总是出现问题,后来知道,文件操作有一定的步骤,即进行文件读

13、写前都要打开文件,完成读写后还要关闭文件,并且通过文件代号(句柄)来标示文件。这个听起来起来有点像废话,但这就是系统功能调用处理文件的必经步骤(以前我们处理文件时也是按照这样的步骤来的,只不过一些应用软件帮我们完成了这些步骤而已)。4.2.2 读入缓冲区的大小问题 我们的编码算法很简单,操作对象是单个字节,因此我们每次读入缓冲区的字节数为一个字节就够了。4.2.3 文件结束标志因为我们每次读文件只读一个字节,用的是3FH号功能,出口参数是AX,存放实际读取的字节数,因此我们没读完一个字节后分析AX里面是不是零就可以了,如果是零,则文件读取结束,否则继续读下一个字节。第五章 总结与体会 在第一天

14、课程设计的时候,我们小组已经在网上找到了一摸一样的代码。不过为了多学点东西,我们小组还是决定自己做。 困难,当然是有的。特别是刚开始的时候,编译和链接都没有显示错误,但运行程序时运行不起来,这时候不知道该怎么调试,只能一条一条的分析汇编代码。因为上学期学微机原理的时候没怎么用到字符串的读写,开始想当然的操作由键盘得来的字符串,不管怎么处理,输出来的结果都是不对的。后来只得慢慢查阅治疗。很明显的教训就是:做东西前先要查阅相关的资料,不能想当然。 有了头绪之后就渐渐的快起来了,昨天早上半天在实验室基本没做什么事情,就熟悉了一下题目,编写几段简单的汇编代码调试不出来后就素手无策了。(我想对于刚开始试

15、着自己编写一些东西的同学都是这样的吧。)效率最高的是昨天晚上,我倒图书馆借了一本书,就是参考文献的第二本,九点半坐在宿舍开始搞。写几行代码,看几页书,就这样慢慢地进行着。进行程序的分块调试。从最基本的输出字符串开始。然后将加密前的文件和加密后的文件在代码中给出(即程序运行时不需要从键盘或得),随后添加从键盘或得文件名的功能。搞到一点半基本完成,高兴地睡了。 今天早上给小组同学看成果的时候,他们立马提出了一个要求:加密后的文件应该立即覆盖源文件,不需要输入两次文件名(分别为加密前的文件名和加密后的文件名)。于是,改。 改的时候矛盾产生了:在我的算法中,两个文件是同时打开的,而且每次读写一个字节。

16、因此建立第二个文件时不能立即覆盖第一个文件,否则无法读取源文件。于是想出了一个简单的办法:创建一个新文件,将加密(解密)后的内容放入这个新文件中,然后将源文件删除,最后将新文件的文件名改为源文件的文件名。这样,对用户来说,就是对文件经行加密(解密)。 通过这次课程设计,我又加深了我以前的一个想法:人,没有聪明和笨之分,技术这方面的东西,只要师傅肯教,学生肯学,学起来是非常快的。随着网络的发展,学期渠道的增多,师傅的作用淡化了,(当然,不是说师傅不重要,而是说以大众为师,在生活中获得知识。)学到东西的多少,完全还由学生自己的品质决定。陈汝军 2011/6/3(0:08)参考文献1 朱金钧. 微型

17、计算机原理及应用技术.机械工业出版社,第2版2 程学先,汇编语言程序设计,武汉理工大学出版社附录PRINTMACROMSG;向屏幕输出宏定义PUSH DXPUSH AXLEA DX,MSGMOV AH,09HINT 21HPOP AXPOP DXENDMGETSMACRO ADDR ;DS:DX=缓冲区首地址PUSH DXPUSH AXLEA DX,ADDRMOV AH,0AHINT 21HPOP AXPOP DXENDMDATA SEGMENT INFODB0AH,0DH,-WELCOME TO USE OUR CODE/DECODE TOOL-,0AH,0DHDB0AH,0DH,|,0AH

18、,0DHDB0AH,0DH,| MADE BY HUAHUA |,0AH,0DHDB0AH,0DH,| NO RIGHTS RESERVED|,0AH,0DHDB0AH,0DH,| |,0AH,0DHDB0AH,0DH, -,0AH,0DHDB0AH,0DH,0AH,0DH,$INPUTDB0AH,0DH,INPUT THE FILE NAME NEED TO HANDLE:,0AH,0DH,$CHOSEDB0AH,0DH,CHOSE:1-ENCODE,2-DECODE OTHERS-QUIT,0AH,0DH,$NOTOPENDB0AH,0DH,CAN NOT OPEN FILE!,0AH,0

19、DH,$NOTCRTDB0AH,0DH,CAN NOT CREATE NEW FILE,0AH,0DH,$NOTREADDB0AH,0DH,CAN NOT READ FILE!,0AH,0DH,$WAITINGDB0AH,0DH,IM DEALING,PLEASE WAIT!,0AH,0DH,$FINISHDB0AH,0DH,MISSION SUCCESS!,0AH,0DH,$REDY_QUITDB0AH,0DH,PRESS ANY KEY TO QUIT!,0AH,0DH,$F1_NAMEDB20F1_NAMELENDB?FILE1DB20 DUP (0)FILE2DBTEMP.TXT,0B

20、UFFERDB?LONGDW?MODEDB?;存放标志,MODE=1,编码;MODE=2译码F1_NODW ?F2_NODW ?BUFFER_INDB 80H DUP(?)CHOICEDB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:PRINT INFOMOV AX,DATAMOV DS,AXMOV ES,AXPRINT INPUTGETS F1_NAME;获取原文件名MOV BH,0MOV BL,F1_NAMELENMOV FILE1BX,0LEA DX,FILE1;打开原文件FILE1MOV AL,00HMOV AH,3DHINT 2

21、1HJNC OPEN_OKPRINT NOTOPENJMP REDY_TO_QUITOPEN_OK:MOV F1_NO,AX;-PRINT CHOSE;选择加密还是解密MOV AH,01HINT 21HCMP AL,31HJZ MODE1CMP AL,32HJZ MODE2JMP REDY_TO_QUITMODE1:MOV AL,01HMOV MODE,ALJMP BEGINMODE2:MOV AL,02HMOV MODE,ALJMP BEGIN;-BEGIN:PRINT WAITINGLEA DX,FILE2MOV AH,3CHMOV CX,0INT 21HJNC CRT_OKPRINT N

22、OTCRTJMP REDY_TO_QUITCRT_OK:MOV F2_NO,AXLEA DX,FILE2MOV AH,3DHINT 21H;-READ_FILE:;读文件一个字节MOV BX,F1_NOLEA DX,BUFFERMOV CX,1MOV AH,3FH INT 21HJNC RED_OKPRINT NOTREADJMP REDY_TO_QUITRED_OK:ENCODE_DECODE:TEST AX,0FFFFHJZ CODE_OKMOV AL,BUFFERMOV AH,MODECMP AH,01HJNZ DEADD AL,0AAHJMP OKDE:SUB AL,0AAHOK:MO

23、V BUFFER,ALMOV BX,F2_NOMOV CX,1LEA DX,BUFFERMOV AH,40HINT 21HJMP READ_FILECODE_OK:MOV BX,F1_NOMOV AH,3EHINT 21HMOV BX,F2_NOMOV AH,3EHINT 21HLEA DX,FILE1;删除原文件MOV AH,41HINT 21HLEA DX,FILE2;创建的文件重命名LEA DI,FILE1MOV AH,56HINT 21HPRINT FINISHJMP REDY_TO_QUIT;-REDY_TO_QUIT:PRINT REDY_QUITMOV AH,01HINT 21HMOV AH,4CH INT 21HCODE ENDSEND START课程设计独创性声明: 本次课程设计除了课题背景及意义等少数内容参考相关文献外,其余原理及代码均属自己原创。 学生签名: 花花 指导教师评语:课程设计成绩: 指导教师签名: 教研室意见: 教研室主任签名:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com