《汇编语言》课程设计报告
文件加密程序
院 系 :计算机科学与技术
专 业 :计算机科学与技术
班 级 : 计算机 0907 班
学 号 : U200915075
姓 名 : 刘珂男
指导教师 : 卢萍
2011 年 9 月 7 日
1
************目
录*************
一、需求分析
……………………………………………… 3
二、系统设计
……………………………………………… 3
三、软件开发
……………………………………………… 16
四、软件测试
……………………………………………… 16
五、特点不足
……………………………………………… 21
六、过程和体会 ……………………………………………… 25
七、源码和说明 ……………………………………………… 28
2
一、需求分析
1、题目要求
编写一个文件加密程序 enc,对于任意的文件进行加密和解密,加密算法何
以自选。
程序功能:
1.程序带有 3 个命令行参数,依次为运行模式、密钥、文件名。
e 密钥 文件名
Enc
对于文件进行加密
Enc
对于文件进行解密
要求加密后的文件进行解密能够完全恢复成原文件。
d 密钥 文件名
2、需求分析
重点考察
1.基本的算术运算和逻辑位运算。
2.用汇编实现简单的数据结构。
3.INT21H 系统功能调用中有关文件、目录的操作。
4.可执行程序的参数使用。
5.综合解决问题的能力。
二、系统设计
1、概要设计
(1)设计思路
1、要对一个文件进行加密处理首先要将其打开,汇编中可用 3DH 功能调用
按路径打开文件。
2、打开文件之后便是将其调入内存之中,因而用到 3FH 功能调用,从文件
或设备中读入。
3、按写好的加密程序对其进行加密处理。
4、将加密后的内存中的文件重新写入覆盖掉原文件,可用 40H 功能调用,
向文件或设备写入。
5、覆盖掉原文件后再关闭文件,可用 3EH 功能调用,关闭文件。
6、解密部分与加密部分相仿,先打开文件,读入内存,解密后重新写入覆
3
盖原文件,最后关闭文件
(2)加密原理
利用汇编语言读文件功能调用,将文件数据每次读一个字节至内存之中,输
入加密密匙,将其由字符转变成数字,与内存中的文件内容相加,改变文件内容,
再写入覆盖文件,完成加密处理。
(3)解密原理
解密原理与加密原理基本一致,将文件数据每次读一个字节至内存之中,输
入加密密匙,将其由字符转变成数字,由内存中的待解密的文件内容减去密匙,
改变文件内容,再写入覆盖文件,完成解密处理。
(4)模块划分
程序分成三大模块
1、主模块对文件进行读写操作及输出信息提示,并调用加密和解密模块。
2、加密模块调用加密子程序对文件进行加密处理,并返回主程序。
3、解密模块调用解密子程序对文件进行解密处理,并返回主程序。
(5)模块之间关系
程序以主模块为框架,依次读入一个文件字节后,再输入加密密匙,将密匙
处理后,调用加密子模块对文件字节加密处理(本质为文件字符 ACSII 码+处理后
密匙大小),加密完成后返回主模块,继续读入下一个字符,调用加密模块加密,
直至所有文件字符读完为止;主模块与解密模块之间的关系也基本同上!
(6)总体结构及流程图
1.进入选择菜单,选择进行加密、解密处理或者了解程序及作者信息,又或
者退出。
2.选择 加密 后,输入文件路径及文件名打开文件,将文件一个字符一个字
符读入内存,输入加密密匙,调用加密子函数对文件字符一个一个加密处理直至
完成整个文件加密,加密完成后返回选择菜单,继续进行选择操作。
3.选择 解密 后,基本与加密一致,仅仅是解密时完成一个加密的逆过程。
4.选择 了解介绍 后,会有关于软件和设计者的信息。
5.选择 退出 后,会返回上级菜单。
4
6.总体结构流程图
开始
进入选择菜单,根据提示进行操作选择
N
N
N
输入='3'?
输入='1'?
输入='2'?
结束
Y
Y
输出关于程序和作者的信息
依次输入文件路径和文件名及加密密
匙,打开并读入文件并对密匙进行处理
加密完成后,写入覆盖源文件,并关闭
文件,返回选择菜单
Y
依次输入文件路径和文件名及解密密
匙,打开并读入文件并对密匙进行处理
解密完成后,写入覆盖源文件,并关闭
文件,返回选择菜单
5
(7)数据段设计
1、首先是选择菜单的设计
OPTION_MSG
·
DB
DB
DB
DB
DB
DB
DB
DB
0DH,0AH
"
"
"
"
"
"
"
********* WELCOME TO USE THIS SOFTWARE
********",0DH,0AH
YOU CAN USE THIS SOFTWARE TO ENCRPT AND
DECRYRPT ",0DH,0AH
INPUT 1 TO ENCRYPT!",0DH,0AH
INPUT 2 TO DECRYPT!",0DH,0AH
INPUT 3 TO GET THE INTRODUCTION!",0DH,0AH
INPUT OTHERS TO QUIT!",0DH,0AH
PLEASE INPUT THE NUMBER TO MAKE
CHOICE!",0DH,0AH,'$'
;选择菜单界面,输入 1 进行加密,2 进行解密,3 了解软件信息,输入其它退出
2、程序介绍和软件设计者信息
INTRO_MSG DB 0DH,0AH
DB "
DB "
DB
"
DB "
DB "
DB "
********* WELCOME TO USE THIS SOFTWARE
********",0DH,0AH
THIS SOFTWARE IS A VERY SIMPLE TOOL!",0DH,0AH
THIS KIND OF MEANS IS EASY TO USE AND CAN HELP YOU
TO PROTECT YOUR PRIVACY",0DH,0AH
YOU CAN USE IT TO ACHIEVE ENCRYPTION AND
ON",0DH,0AH
SCHOOL:HUST UNIVERSITY
CLASS",0DH,0AH
DESIGNER: LIU KE NAN
ID:U200915075",0DH,0AH,0DH,0AH,0DH,0AH,'$'
CLASS: CS 0907
STUDENT
3、关于一些信息提示
ERROR_MSG DB
ERROR_MSG1 DB
"ERROR!",0DH,0AH,'$' ;提示选择或输入有误的信息
"PLEASE INPUT DIGIT AND DON'T INPUT ANY OTHER
;当输入不是数字时,给出错误提示
CHARS!",0DH,0AH,'$'
ERROR_MSG2 DB
"THE CODE MAYBE TOO BID ,PLEASE INPUT AGAIN!
",0DH,0AH,'$'
;当输入数字过大时造成溢出,给出
错误提示
QUIT_MSG
DB
INPUT_MSG DB
"PRESS ANY KEY TO QUIT$"
"PLEASE INPUT THE SOURCE AND THE
;退出的信息提示
FILENAME",0DH,0AH,'$'
;提示输入文件的资源地址和文件名
INPUT_MSG2 DB "
YOU CAN INPUT AGAIN IF YOU INPUT THE WRONG
6
CODE!",0DH,0AH
DB
"
TO CONTINUE!",0DH,0AH,'$'
INPUT_MSG3 DB "
CHOOSE 'Y' TO INPUT THE CODE AGAIN,PRESS ANY OTHER KEY
; 加 密 时 , 确 认 是 否 重 新 输 入 密 码 的 提 示
YOU CAN INPUT AGAIN IF YOU INPUT THE WRONG
CODE!",0DH,0AH
DB
" ***PAY ATTENTION: IF YOU INPUT THE WRONG CODE,THE
FILE WOULD BE DESTROYED!***",0DH,0AH
DB
"
CHOOSE 'Y' TO INPUT THE CODE AGAIN,PRESS ANY OTHER KEY
TO CONTINUE!",0DH,0AH,'$'
ENCRY_MSG DB "
;解密时,警告及确认是否重新输入密码的提示
THE FILE HAS BEEN ENCRYPTED!",0DH,0AH,0DH,0AH,'$'
DECRY_MSG DB "
THE FILE HAS BEEN DECRYPTED!",0DH,0AH,0DH,0AH,'$'
;加密完成后的提示
;解密完成后的提示
DB
CODE_MSG
DB
"BUT IF YOU INPUT THE WRONG NUMBER,THE FILE WOULD BE
DESTROYED!",0DH,0AH,'$'
"PLEASE INPUT THE CODE AND IT SHOULD BE
DIGIT!",0DH,0AH,'$'
;提示输入密码,并且密码为数字
4、关于一些变量的说明
CHOICE
BUF
BUF_2
DB ?
DB ?
DB 20
DB ?
DB 20 DUP(0)
DB 20,?
DB 20 DUP(?),?
FINPTR
FNAME_IN
NUMBER_IN DW ?
;保存用户选择项
;存放文件的地址
;存放密码的缓冲区
;存放文件名的缓冲区的前两个字节
;实际存放文件名的缓冲区
;文件代号
USE16
;数据段
5、基本格式
SEGMENT
DATA
…
DATA
ENDS
(8)堆栈段设计
因为不需要进行对堆栈段进行进行复杂的使用,因为定义也就相对简单。
STACK
;堆栈段
USE16
STACK
SEGMENT
DB 200 DUP(0)
STACK
ENDS
7
按上述堆栈段一般的定义方式即可
2、详细设计
(1)程序中用到的宏定义及其说明
CRLF
MACRO
;回车换行符的宏定义
AH,2
DL,0AH
21H
DL,0DH
21H
MOV
MOV
INT
MOV
INT
ENDM
FCLOSE
MACRO NUMBER
AH,3EH
BX,NUM
21H
MOV
MOV
INT
ENDM
;关闭文件的宏定义,参数为 文件代号
;3EH 为关闭一个文件的功能调用
;(BX)为文件代号
FOPEN
MACRO FILENAME,TYPE,NUMBER
;打开文件的宏定义,参数
MOV
AL,TYPE
AH,3DH
DX,FILENAME
21H
NUMBER,AX
MOV
LEA
INT
MOV
ENDM
为 文件名,属性,文件代号
;(AL)=0 为读文件,(AL)=1 为写
文件,(AL)=2 为读/写文件
;3DH 为打开文件的系统功能调用
;DS:[DX]为字符串地址
;(AX)为文件代号
FREAD
MACRO NUMBER,BUF,SIZE
;读文件的宏定义,参数为
文件代号,缓冲区偏移地址,要读的字节个数
;3FH 为读文件的功能调用,从文件或设备读入
;(BX)为文件代号
;(CX)为写盘字节数
;DS:[DX]为缓冲区首址
;(AX)为实际读入的字节数
AH,3FH
BX,NUMBER
CX,SIZE
DX,BUF
21H
MOV
MOV
MOV
LEA
INT
ENDM
FWRITE
MACRO NUMBER,BUF,SIZE
;写文件的宏定义,参数为
8