您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 电子商务 > 汇编课设实验报告―文件加密解密
1《汇编语言》课程设计报告文件加密程序院系:计算机科学与技术专业:计算机科学与技术班级:计算机0907班学号:U200915075姓名:刘珂男指导教师:卢萍2011年9月7日2************目录*************一、需求分析………………………………………………3二、系统设计………………………………………………3三、软件开发………………………………………………16四、软件测试………………………………………………16五、特点不足………………………………………………21六、过程和体会………………………………………………25七、源码和说明………………………………………………283一、需求分析1、题目要求编写一个文件加密程序enc,对于任意的文件进行加密和解密,加密算法何以自选。程序功能:1.程序带有3个命令行参数,依次为运行模式、密钥、文件名。Ence密钥文件名对于文件进行加密Encd密钥文件名对于文件进行解密要求加密后的文件进行解密能够完全恢复成原文件。2、需求分析重点考察1.基本的算术运算和逻辑位运算。2.用汇编实现简单的数据结构。3.INT21H系统功能调用中有关文件、目录的操作。4.可执行程序的参数使用。5.综合解决问题的能力。二、系统设计1、概要设计(1)设计思路1、要对一个文件进行加密处理首先要将其打开,汇编中可用3DH功能调用按路径打开文件。2、打开文件之后便是将其调入内存之中,因而用到3FH功能调用,从文件或设备中读入。3、按写好的加密程序对其进行加密处理。4、将加密后的内存中的文件重新写入覆盖掉原文件,可用40H功能调用,向文件或设备写入。5、覆盖掉原文件后再关闭文件,可用3EH功能调用,关闭文件。6、解密部分与加密部分相仿,先打开文件,读入内存,解密后重新写入覆4盖原文件,最后关闭文件(2)加密原理利用汇编语言读文件功能调用,将文件数据每次读一个字节至内存之中,输入加密密匙,将其由字符转变成数字,与内存中的文件内容相加,改变文件内容,再写入覆盖文件,完成加密处理。(3)解密原理解密原理与加密原理基本一致,将文件数据每次读一个字节至内存之中,输入加密密匙,将其由字符转变成数字,由内存中的待解密的文件内容减去密匙,改变文件内容,再写入覆盖文件,完成解密处理。(4)模块划分程序分成三大模块1、主模块对文件进行读写操作及输出信息提示,并调用加密和解密模块。2、加密模块调用加密子程序对文件进行加密处理,并返回主程序。3、解密模块调用解密子程序对文件进行解密处理,并返回主程序。(5)模块之间关系程序以主模块为框架,依次读入一个文件字节后,再输入加密密匙,将密匙处理后,调用加密子模块对文件字节加密处理(本质为文件字符ACSII码+处理后密匙大小),加密完成后返回主模块,继续读入下一个字符,调用加密模块加密,直至所有文件字符读完为止;主模块与解密模块之间的关系也基本同上!(6)总体结构及流程图1.进入选择菜单,选择进行加密、解密处理或者了解程序及作者信息,又或者退出。2.选择加密后,输入文件路径及文件名打开文件,将文件一个字符一个字符读入内存,输入加密密匙,调用加密子函数对文件字符一个一个加密处理直至完成整个文件加密,加密完成后返回选择菜单,继续进行选择操作。3.选择解密后,基本与加密一致,仅仅是解密时完成一个加密的逆过程。4.选择了解介绍后,会有关于软件和设计者的信息。5.选择退出后,会返回上级菜单。56.总体结构流程图YNYNYN开始进入选择菜单,根据提示进行操作选择输入='3'?输出关于程序和作者的信息输入='1'?输入='2'?依次输入文件路径和文件名及加密密匙,打开并读入文件并对密匙进行处理加密完成后,写入覆盖源文件,并关闭文件,返回选择菜单结束依次输入文件路径和文件名及解密密匙,打开并读入文件并对密匙进行处理解密完成后,写入覆盖源文件,并关闭文件,返回选择菜单6(7)数据段设计1、首先是选择菜单的设计OPTION_MSGDB0DH,0AH·DB*********WELCOMETOUSETHISSOFTWARE********,0DH,0AHDBYOUCANUSETHISSOFTWARETOENCRPTANDDECRYRPT,0DH,0AHDBINPUT1TOENCRYPT!,0DH,0AHDBINPUT2TODECRYPT!,0DH,0AHDBINPUT3TOGETTHEINTRODUCTION!,0DH,0AHDBINPUTOTHERSTOQUIT!,0DH,0AHDBPLEASEINPUTTHENUMBERTOMAKECHOICE!,0DH,0AH,'$';选择菜单界面,输入1进行加密,2进行解密,3了解软件信息,输入其它退出2、程序介绍和软件设计者信息INTRO_MSGDB0DH,0AHDB*********WELCOMETOUSETHISSOFTWARE********,0DH,0AHDBTHISSOFTWAREISAVERYSIMPLETOOL!,0DH,0AHDBTHISKINDOFMEANSISEASYTOUSEANDCANHELPYOUTOPROTECTYOURPRIVACY,0DH,0AHDBYOUCANUSEITTOACHIEVEENCRYPTIONANDON,0DH,0AHDBSCHOOL:HUSTUNIVERSITYCLASS:CS0907CLASS,0DH,0AHDBDESIGNER:LIUKENANSTUDENTID:U200915075,0DH,0AH,0DH,0AH,0DH,0AH,'$'3、关于一些信息提示ERROR_MSGDBERROR!,0DH,0AH,'$';提示选择或输入有误的信息ERROR_MSG1DBPLEASEINPUTDIGITANDDON'TINPUTANYOTHERCHARS!,0DH,0AH,'$';当输入不是数字时,给出错误提示ERROR_MSG2DBTHECODEMAYBETOOBID,PLEASEINPUTAGAIN!,0DH,0AH,'$';当输入数字过大时造成溢出,给出错误提示QUIT_MSGDBPRESSANYKEYTOQUIT$;退出的信息提示INPUT_MSGDBPLEASEINPUTTHESOURCEANDTHEFILENAME,0DH,0AH,'$';提示输入文件的资源地址和文件名INPUT_MSG2DBYOUCANINPUTAGAINIFYOUINPUTTHEWRONG7CODE!,0DH,0AHDBCHOOSE'Y'TOINPUTTHECODEAGAIN,PRESSANYOTHERKEYTOCONTINUE!,0DH,0AH,'$';加密时,确认是否重新输入密码的提示INPUT_MSG3DBYOUCANINPUTAGAINIFYOUINPUTTHEWRONGCODE!,0DH,0AHDB***PAYATTENTION:IFYOUINPUTTHEWRONGCODE,THEFILEWOULDBEDESTROYED!***,0DH,0AHDBCHOOSE'Y'TOINPUTTHECODEAGAIN,PRESSANYOTHERKEYTOCONTINUE!,0DH,0AH,'$';解密时,警告及确认是否重新输入密码的提示ENCRY_MSGDBTHEFILEHASBEENENCRYPTED!,0DH,0AH,0DH,0AH,'$';加密完成后的提示DECRY_MSGDBTHEFILEHASBEENDECRYPTED!,0DH,0AH,0DH,0AH,'$';解密完成后的提示DBBUTIFYOUINPUTTHEWRONGNUMBER,THEFILEWOULDBEDESTROYED!,0DH,0AH,'$'CODE_MSGDBPLEASEINPUTTHECODEANDITSHOULDBEDIGIT!,0DH,0AH,'$';提示输入密码,并且密码为数字4、关于一些变量的说明CHOICEDB?;保存用户选择项BUFDB?;存放文件的地址BUF_2DB20;存放密码的缓冲区DB?DB20DUP(0)FINPTRDB20,?;存放文件名的缓冲区的前两个字节FNAME_INDB20DUP(?),?;实际存放文件名的缓冲区NUMBER_INDW?;文件代号5、基本格式DATASEGMENTUSE16;数据段…DATAENDS(8)堆栈段设计因为不需要进行对堆栈段进行进行复杂的使用,因为定义也就相对简单。STACKSEGMENTUSE16STACK;堆栈段DB200DUP(0)STACKENDS8按上述堆栈段一般的定义方式即可2、详细设计(1)程序中用到的宏定义及其说明CRLFMACRO;回车换行符的宏定义MOVAH,2MOVDL,0AHINT21HMOVDL,0DHINT21HENDMFCLOSEMACRONUMBER;关闭文件的宏定义,参数为文件代号MOVAH,3EH;3EH为关闭一个文件的功能调用MOVBX,NUM;(BX)为文件代号INT21HENDMFOPENMACROFILENAME,TYPE,NUMBER;打开文件的宏定义,参数为文件名,属性,文件代号MOVAL,TYPE;(AL)=0为读文件,(AL)=1为写文件,(AL)=2为读/写文件MOVAH,3DH;3DH为打开文件的系统功能调用LEADX,FILENAME;DS:[DX]为字符串地址INT21HMOVNUMBER,AX;(AX)为文件代号ENDMFREADMACRONUMBER,BUF,SIZE;读文件的宏定义,参数为文件代号,缓冲区偏移地址,要读的字节个数MOVAH,3FH;3FH为读文件的功能调用,从文件或设备读入MOVBX,NUMBER;(BX)为文件代号MOVCX,SIZE;(CX)为写盘字节数LEADX,BUF;DS:[DX]为缓冲区首址INT21H;(AX)为实际读入的字节数ENDMFWRITEMACRONUMBER,BUF,SIZE;写文件的宏定义,参数为9文件代号,缓冲区偏移地址,要写的字节个数MOVAH,40H;40H为写文件的功能调用,向文件或设备写入MOVBX,NUMBER;(BX)为文件代号MOVCX,SIZE;(CX)为写盘字节数LEADX,BUF;DS:[DX]为缓冲区首址INT21H;(AX)为实际写盘字节数ENDMPAUSEMACRO;暂停的宏定义MOVAH,07H;07H为直接控制台输入,无直接显示INT21HENDMQUITMACRO;返回DOS环境的宏定义MOVAH,4CH;4CH为终止当前程序并返回调用程序的功能调用INT21HENDMREADMACROA;输入字符串的宏定义,10号系统功能调用LEADX,AMOVAH,0AHINT21HENDMSHIFTMACRONUMBER;改变文件读写指针的宏定义,参数为文件代号MOVAH,42H;42H为移动文件读写指针的功能调用MOVBX,NUMBER;(BX)为文件代号MOVDX,-1;(DX):(AX)为新的指针位置MOVCX,-1;(CX):(DX)为位移量MOVAL,1;(AL)=0为绝对移动,(AL)=1为相对移动,(AL)=2为绝对倒移INT21HENDMWRITEMACROA;输出字符串的宏定义,9号系统功能调用LEADX,AMOVAH,09HINT21HENDM10(2)各模块的实现算法及流程图1、主模块算法(1)调用WRITE宏定义输出选择菜单(2)使用1号系统功能调用输入保存用户的选择至CHOICE变量之中(3)根据用户的选择项进入不同的功能,输入为‘3’时输出程序及用户信息,输入为‘2’或者‘1’时继续向下运行,当不是那三个选项时即跳向退出(4)调用WRITE宏定义输出提示,让用户输入文件路径及文件名(5)将文件地址保存并调用FOPEN宏定义将文件打开(6)如打开成功(即CF-0)则向下继续运行,失败则输出错误信息,返回选择菜单(7)比较用户的输入选项,若为‘1’则跳向加密模块,为‘2’则跳向解密模块2、主模块流程图YN开始调用WRITE宏定义(9号调用
本文标题:汇编课设实验报告―文件加密解密
链接地址:https://www.777doc.com/doc-4411675 .html