文件加密实验报告.docx
《文件加密实验报告.docx》由会员分享,可在线阅读,更多相关《文件加密实验报告.docx(41页珍藏版)》请在冰点文库上搜索。
文件加密实验报告
文件加密实验报告
院系:
专业:
班级:
学号:
姓名:
指导教师:
1、需求分析………………………………………………3
2、系统设计………………………………………………3
3、软件开发………………………………………………16
4、软件测试………………………………………………16
5、特点不足………………………………………………21
6、过程和体会………………………………………………25
7、源码和说明………………………………………………28
一、需求分析
1、题目要求
编写一个文件加密程序enc,对于任意的文件进行加密和解密,加密算法何以自选。
程序功能:
1.程序带有3个命令行参数,依次为运行模式、密钥、文件名。
Ence密钥文件名
对于文件进行加密
Encd密钥文件名
对于文件进行解密
要求加密后的文件进行解密能够完全恢复成原文件。
2、需求分析
重点考察
1.基本的算术运算和逻辑位运算。
2.用汇编实现简单的数据结构。
3.INT21H系统功能调用中有关文件、目录的操作。
4.可执行程序的参数使用。
5.综合解决问题的能力。
2、系统设计
1、概要设计
(1)设计思路
1、要对一个文件进行加密处理首先要将其打开,汇编中可用3DH功能调用按路径打开文件。
2、打开文件之后便是将其调入内存之中,因而用到3FH功能调用,从文件或设备中读入。
3、按写好的加密程序对其进行加密处理。
4、将加密后的内存中的文件重新写入覆盖掉原文件,可用40H功能调用,向文件或设备写入。
5、覆盖掉原文件后再关闭文件,可用3EH功能调用,关闭文件。
6、解密部分与加密部分相仿,先打开文件,读入内存,解密后重新写入覆盖原文件,最后关闭文件
(2)加密原理
利用汇编语言读文件功能调用,将文件数据每次读一个字节至内存之中,输入加密密匙,将其由字符转变成数字,与内存中的文件内容相加,改变文件内容,再写入覆盖文件,完成加密处理。
(3)解密原理
解密原理与加密原理基本一致,将文件数据每次读一个字节至内存之中,输入加密密匙,将其由字符转变成数字,由内存中的待解密的文件内容减去密匙,改变文件内容,再写入覆盖文件,完成解密处理。
(4)模块划分
程序分成三大模块
1、主模块对文件进行读写操作及输出信息提示,并调用加密和解密模块。
2、加密模块调用加密子程序对文件进行加密处理,并返回主程序。
3、解密模块调用解密子程序对文件进行解密处理,并返回主程序。
(5)模块之间关系
程序以主模块为框架,依次读入一个文件字节后,再输入加密密匙,将密匙处理后,调用加密子模块对文件字节加密处理(本质为文件字符ACSII码+处理后密匙大小),加密完成后返回主模块,继续读入下一个字符,调用加密模块加密,直至所有文件字符读完为止;主模块与解密模块之间的关系也基本同上!
(6)总体结构及流程图
1.进入选择菜单,选择进行加密、解密处理或者了解程序及作者信息,又或者退出。
2.选择加密后,输入文件路径及文件名打开文件,将文件一个字符一个字符读入内存,输入加密密匙,调用加密子函数对文件字符一个一个加密处理直至完成整个文件加密,加密完成后返回选择菜单,继续进行选择操作。
3.选择解密后,基本与加密一致,仅仅是解密时完成一个加密的逆过程。
4.选择了解介绍后,会有关于软件和设计者的信息。
5.选择退出后,会返回上级菜单。
6.总体结构流程图
输出关于程序和作者的信息
输入='3'?
进入选择菜单,根据提示进行操作选择
开始
Y
N
输入='1'?
Y
依次输入文件路径和文件名及加密密匙,打开并读入文件并对密匙进行处理
N
加密完成后,写入覆盖源文件,并关闭文件,返回选择菜单
输入='2'?
Y
依次输入文件路径和文件名及解密密匙,打开并读入文件并对密匙进行处理
N
解密完成后,写入覆盖源文件,并关闭文件,返回选择菜单
结束
(7)数据段设计
1、首先是选择菜单的设计
OPTION_MSGDB0DH,0AH
·DB"*********WELCOMETOUSETHISSOFTWARE********",0DH,0AH
DB"YOUCANUSETHISSOFTWARETOENCRPTANDDECRYRPT",0DH,0AH
DB"INPUT1TOENCRYPT!
",0DH,0AH
DB"INPUT2TODECRYPT!
",0DH,0AHDB"INPUT3TOGETTHEINTRODUCTION!
",0DH,0AH
DB"INPUTOTHERSTOQUIT!
",0DH,0AH
DB"PLEASEINPUTTHENUMBERTOMAKECHOICE!
",0DH,0AH,'$'
;选择菜单界面,输入1进行加密,2进行解密,3了解软件信息,输入其它退出
2、程序介绍和软件设计者信息
INTRO_MSGDB0DH,0AH
DB"*********WELCOMETOUSETHISSOFTWARE********",0DH,0AH
DB"THISSOFTWAREISAVERYSIMPLETOOL!
",0DH,0AH
DB"THISKINDOFMEANSISEASYTOUSEANDCANHELPYOUTOPROTECTYOURPRIVACY",0DH,0AH
DB"YOUCANUSEITTOACHIEVEENCRYPTIONANDON",0DH,0AH
DB"SCHOOL:
HUSTUNIVERSITYCLASS:
CS0907CLASS",0DH,0AH
DB"DESIGNER:
LIUKENANSTUDENTID:
U200915075",0DH,0AH,0DH,0AH,0DH,0AH,'$'
3、关于一些信息提示
ERROR_MSGDB"ERROR!
",0DH,0AH,'$';提示选择或输入有误的信息
ERROR_MSG1DB"PLEASEINPUTDIGITANDDON'TINPUTANYOTHERCHARS!
",0DH,0AH,'$';当输入不是数字时,给出错误提示
ERROR_MSG2DB"THECODEMAYBETOOBID,PLEASEINPUTAGAIN!
",0DH,0AH,'$';当输入数字过大时造成溢出,给出错误提示
QUIT_MSGDB"PRESSANYKEYTOQUIT$";退出的信息提示
INPUT_MSGDB"PLEASEINPUTTHESOURCEANDTHEFILENAME",0DH,0AH,'$';提示输入文件的资源地址和文件名
INPUT_MSG2DB"YOUCANINPUTAGAINIFYOUINPUTTHEWRONGCODE!
",0DH,0AH
DB"CHOOSE'Y'TOINPUTTHECODEAGAIN,PRESSANYOTHERKEYTOCONTINUE!
",0DH,0AH,'$';加密时,确认是否重新输入密码的提示INPUT_MSG3DB"YOUCANINPUTAGAINIFYOUINPUTTHEWRONGCODE!
",0DH,0AH
DB"***PAYATTENTION:
IFYOUINPUTTHEWRONGCODE,THEFILEWOULDBEDESTROYED!
***",0DH,0AH
DB"CHOOSE'Y'TOINPUTTHECODEAGAIN,PRESSANYOTHERKEYTOCONTINUE!
",0DH,0AH,'$'
;解密时,警告及确认是否重新输入密码的提示
ENCRY_MSGDB"THEFILEHASBEENENCRYPTED!
",0DH,0AH,0DH,0AH,'$'
;加密完成后的提示
DECRY_MSGDB"THEFILEHASBEENDECRYPTED!
",0DH,0AH,0DH,0AH,'$'
;解密完成后的提示
DB"BUTIFYOUINPUTTHEWRONGNUMBER,THEFILEWOULDBEDESTROYED!
",0DH,0AH,'$'
CODE_MSGDB"PLEASEINPUTTHECODEANDITSHOULDBEDIGIT!
",0DH,0AH,'$'
;提示输入密码,并且密码为数字
4、关于一些变量的说明
CHOICEDB?
;保存用户选择项
BUFDB?
;存放文件的地址
BUF_2DB20;存放密码的缓冲区
DB?
DB20DUP(0)
FINPTRDB20,?
;存放文件名的缓冲区的前两个字节
FNAME_INDB20DUP(?
),?
;实际存放文件名的缓冲区
NUMBER_INDW?
;文件代号
5、基本格式
DATASEGMENTUSE16;数据段
…
DATAENDS
(8)堆栈段设计
因为不需要进行对堆栈段进行进行复杂的使用,因为定义也就相对简单。
STACKSEGMENTUSE16STACK;堆栈段
DB200DUP(0)
STACKENDS
按上述堆栈段一般的定义方式即可
2、详细设计
(1)程序中用到的宏定义及其说明
CRLFMACRO;回车换行符的宏定义
MOVAH,2
MOVDL,0AH
INT21H
MOVDL,0DH
INT21H
ENDM
FCLOSEMACRONUMBER;关闭文件的宏定义,参数为文件代号
MOVAH,3EH;3EH为关闭一个文件的功能调用
MOVBX,NUM;(BX)为文件代号
INT21H
ENDM
FOPENMACROFILENAME,TYPE,NUMBER;打开文件的宏定义,参数为文件名,属性,文件代号
MOVAL,TYPE;(AL)=0为读文件,(AL)=1为写文件,(AL)=2为读/写文件
MOVAH,3DH;3DH为打开文件的系统功能调用
LEADX,FILENAME;DS:
[DX]为字符串地址
INT21H
MOVNUMBER,AX;(AX)为文件代号
ENDM
FREADMACRONUMBER,BUF,SIZE;读文件的宏定义,参数为文件代号,缓冲区偏移地址,要读的字节个数
MOVAH,3FH;3FH为读文件的功能调用,从文件或设备读入
MOVBX,NUMBER;(BX)为文件代号
MOVCX,SIZE;(CX)为写盘字节数
LEADX,BUF;DS:
[DX]为缓冲区首址
INT21H;(AX)为实际读入的字节数
ENDM
FWRITEMACRONUMBER,BUF,SIZE;写文件的宏定义,参数为文件代号,缓冲区偏移地址,要写的字节个数
MOVAH,40H;40H为写文件的功能调用,向文件或设备写入
MOVBX,NUMBER;(BX)为文件代号
MOVCX,SIZE;(CX)为写盘字节数
LEADX,BUF;DS:
[DX]为缓冲区首址
INT21H;(AX)为实际写盘字节数
ENDM
PAUSEMACRO;暂停的宏定义
MOVAH,07H;07H为直接控制台输入,无直接显示
INT21H
ENDM
QUITMACRO;返回DOS环境的宏定义
MOVAH,4CH;4CH为终止当前程序并返回调用程序的功能调用
INT21H
ENDM
READMACROA;输入字符串的宏定义,10号系统功能调用
LEADX,A
MOVAH,0AH
INT21H
ENDM
SHIFTMACRONUMBER;改变文件读写指针的宏定义,参数为文件代号
MOVAH,42H;42H为移动文件读写指针的功能调用
MOVBX,NUMBER;(BX)为文件代号
MOVDX,-1;(DX):
(AX)为新的指针位置
MOVCX,-1;(CX):
(DX)为位移量
MOVAL,1;(AL)=0为绝对移动,(AL)=1为相对移动,(AL)=2为绝对倒移
INT21H
ENDM
WRITEMACROA;输出字符串的宏定义,9号系统功能调用
LEADX,A
MOVAH,09H
INT21H
ENDM
(2)各模块的实现算法及流程图
1、主模块算法
(1)调用WRITE宏定义输出选择菜单
(2)使用1号系统功能调用输入保存用户的选择至CHOICE变量之中
(3)根据用户的选择项进入不同的功能,输入为‘3’时输出程序及用户信息,输入为‘2’或者‘1’时继续向下运行,当不是那三个选项时即跳向退出
(4)调用WRITE宏定义输出提示,让用户输入文件路径及文件名
(5)将文件地址保存并调用FOPEN宏定义将文件打开
(6)如打开成功(即CF-0)则向下继续运行,失败则输出错误信息,返回选择菜单
(7)比较用户的输入选项,若为‘1’则跳向加密模块,为‘2’则跳向解密模块
2、主模块流程图
开始
调用WRITE宏定义(9号调用)输出选择菜单
使用1号系统功能调用,并将用户的选择项保存在CHOICE中
CHOICE=‘3’?
Y
N
使用WRITE宏定义(9号系统功能调用)输出程序及设计者的介绍
1
CHOICE='1'?
CHOICE='2'?
1
Y
N
CF='0'?
调用FOPEN宏定义(打开文件的宏)打开该文件
调用READ宏定义(10号调用)将输入的文件地址及文件名保存
调用WRTIE宏定义(9号调用)输出提示信息,让用户输入文件的路径及文件名
结束
输出结束的信息并返回上级菜单
N
N
Y
调用WRITE宏定义输出错误信息提示,并返回选择菜单
CHOICE='2'?
Y
进入解密子模块
进入加密子模块
开始
N
3、加密模块算法
(1)调用WRITE宏定义(9号调用)输出提示,让用户输入加密密匙
(2)调用READ宏定义(10号调用)读入用户输入的密码,保存到BUF_2缓冲区中。
(3)将输入的密码由字符转变成数字,并且做出判断,若用户输入的字符长度过长造成溢出,或者输入了非数字字符时,都会返回提示重新输入密码,若输入的密码符合要求,则将转变成数字后的密码重新保存到BUF_2缓冲区中
(4)调用WRITE宏定义输出提示,由用户选择是否重新输入密码,并调用1号调用读入,判断字符是否为‘y’或者'Y'。
如不是则不重新输入,否则重新输入密码。
(5)读入文件的一个字符,并判断理论读入的和实际读入的数目是否一致,如果一致则表示文件还没有读完,若不一致则表示文件已经读完,跳出加密。
(6)未读完时,将文件字符的ACSII码放入CH中,转换成数字的密码放入CL中,将CH与CL相加,重新放入BUF中,依次重复直至文件每个字符都完成加密。
(7)所有文件字符都完成加密后,用FCLOSE宏定义,关闭文件,并用WRITE宏定义输出加密完成的提示。
开始
4、加密模块流程图
给出输入密码的提示并调用10号调用输入密码,并保存在BUF_2缓冲区中
为不覆盖掉之前的输入,进行回车换行
以CX为计数器,储存密码长度,AX存放由字符转换成数字的密码,依次读一个密码字符到BL中
输出错误提示,要求输入为数字
1
BL>‘9’或者BL<‘0’?
Y
N
输出错误提示,用户的密码太大,返回重新输入密码
AX是否产生进位或者溢出?
AX=10*AX+BX存放转变后的数字
BL=BL-30H变成数字,并拓展到BX
1
在读入一个字符至BL中,进行字符到数字的转换
CX=0?
Y
N
N
从文件读入一个字符
跳转至输入密码处,重新输入密码
AL=‘Y’或者‘y’?
输出信息提示:
是否重新输入密码,调用1号调用
Y
Y
N
2
2
理论读入值CX
=实际读入值AX?
结束
文件的全部字符已经全部完成加密处理,调用FCLOSE宏定义关闭文件
N
继续从文件读入一个字符,进行2加密处理
调用FWRITE宏定义,将加密后的字符写入文件,覆盖掉原来的内容
读入文件字符存入CH中,密码存放到CL中,CL+CH后重新放入存放文件字符的BUF中
Y
5.解密算法模块
(1)调用WRITE宏定义(9号调用)输出提示,让用户输入加密密匙
(2)调用READ宏定义(10号调用)读入用户输入的密码,保存到BUF_2缓冲区中。
(3)将输入的密码由字符转变成数字,并且做出判断,若用户输入的字符长度过长造成溢出,或者输入了非数字字符时,都会返回提示重新输入密码,若输入的密码符合要求,则将转变成数字后的密码重新保存到BUF_2缓冲区中
(4)调用WRITE宏定义输出提示,由用户选择是否重新输入密码,并调用1号调用读入,判断字符是否为‘y’或者'Y'。
如不是则不重新输入,否则重新输入密码。
(5)读入文件的一个字符,并判断理论读入的和实际读入的数目是否一致,如果一致则表示文件还没有读完,若不一致则表示文件已经读完,跳出解密。
(6)未读完时,将文件字符的ACSII码放入CH中,转换成数字的密码放入CL中,将CH与CL相减,重新放入BUF中,依次重复直至文件每个字符都完成解密。
(7)所有文件字符都完成解密后,用FCLOSE宏定义,关闭文件,并用WRITE宏定义输出解密完成的提示。
6、解密模块流程图
根据加密算法得知解密算法实际是加密算法的逆过程,仅仅是文件字符加/减密码上是相反的,其余完全一致,所以此处流程图可参照加密算法模块流程图,略去!
(3)各模块参数及寄存器使用说明
1、主模块参数及寄存器说明
CHOICE用来保存用户选择项
FINPTR用来存放文件名的缓冲区的前两个字节
FNAME_IN用来实际存放文件名的缓冲区
AX用来传递数据及系统功能调用
BX用来保存临时数据
DX用用来系统功能调用
2、加密模块极其寄存器说明
BUF用于存放文件字符
BUF_2用于将用户输入的密码保存的缓冲区
CHOICE用来保存用户的选择
AX用来系统功能调用,保存数据,传递数据
BX用来传递数据及保存临时数据
CX用于计数器
DX用于系统功能调用
DI用于传递临时数据,参加运算
SI用于传递临时数据,参加计算
3、解密模块极其寄存器说明
BUF用于存放文件字符
BUF_2用于将用户输入的密码保存的缓冲区
CHOICE用来保存用户的选择
AX用来系统功能调用,保存数据,传递数据
BX用来传递数据及保存临时数据
CX用于计数器
DX用于系统功能调用
DI用于传递临时数据,参加运算
SI用于传递临时数据,参加计算
3、软件开发
此程序用Notpad++编写,利用MASM60进行编译和连接生成可执行文件,用TD进行调试改错。
4、软件测试
1、菜单界面
2、输入‘1’进入加密功能
会提示输入文件路径和文件名
3、输入路径后会提示输入密码
4、会给出输入密码的提示,并要求输入的密码为数字
5.输入密码后不重新输入,会给出加密完成的提示,以下是加密前和加密后文件的差别!
加密前
加密后
6、以下是WORD,PPT,EXCEL等文件加密前后的差距
加密前
加密后
7、输入‘2’进入解密功能
7、进入解密功能后,和加密情况一致,输入与加密情况相同的密码后,各文件解密情况如下所示
8、输入‘3’后了解程序和用户信息
9.输入其它任意键后会退出该程序
5、特点与不足
这个程序在最基本的加密解密功能上加入了一些其它安全措施,对防止可能因为输错密码带来的不良影响有一定帮助,但也仍有很多需要改进的地方!
1、加密安全措施
(1)输入的密码必须为数字,当不为数字时会报错,并提示重新输入密码
(2)为防止因为密码太长,导致溢出的情况,也有对应的措施,当输入的密码太大时,会有错误提示,警告输入的密码过于巨大,并且返回重新输入密码
(3)当输入的密码虽然符合格式,但因为一时失误打错了数字的时候也有可以补救的措施,在输完密码后,会有是否重新输入密码的提示,用户可以根据情况确定是否重新输入
当输入‘Y’或者‘y’后,会有提示重新输入,输入其它的会提示加密完成
2、解密安全措施
(1)和加密一样,加密密匙是数字,那么解密密匙对应的也是数字,输入的解密密匙中有不为数字的字符便会报错,并提示重新输入
(2)与加密一样,解密也为了防止溢出,输入的密码也不能太大,输入过大的数字时会报错,并提示重新输入密码
(3)解密也会因为输错密码而导致文件解密失败,所以解密也会有是否重新输入密码的提示,并且还有解密失败会导致文件损毁的警告
(4)选择输入‘Y’或者‘y’后会有返回重新输入密码,输入其它的字符会提示完成解密
3、其它特色介绍
(1)这个菜单界面还加入了关于程序和程序设计者的介绍,在选择菜单里面的选项输入‘3’即可,介绍下面继续