当前位置:文档之家› 汇编语言对文件简易加密解密

汇编语言对文件简易加密解密

课程设计报告课程微机原理课程设计题目简易文件加密解密系别物理与电子工程学院年级08级专业电子科学与技术班级三学号*******(02 14 23 24) 学生姓名崔雪飞陈祥刘刚李从辉指导教师居伟骏职称讲师设计时间2011-4-18 ~ 2011-4-22目录第一章绪论 (2)第二章分析与设计 (3)2.1 题目 (3)2.2 要求 (3)2.3 方案设计与论证 (3)2.3.1 整体设计思路 (3)2.3.2 方案选择 (3)2.4结构框图等设计步骤 (4)第三章实验程序及分析 (6)3.1 宏定义 (6)3.2 加密模块 (9)3.3 解密模块 (9)3.4 加密和解密算法子程序 (10)第四章实验结果及问题处理 (12)4.1 实验结果 (12)4.2出现的问题以及解决的方案 (13)4.2.1 文件写操作问题 (13)4.2.2 读入缓冲区的大小问题 (14)4.2.3不同文件类型加解密问题 (14)4.2.4 文件结束标志 (15)第五章总结与体会 (16)参考文献 (18)附录 (19)第一章绪论随着计算机硬件的发展,微机系统的功能越来越强,而且计算机的程序设计语言也经过了一个发展的过程。

从最基本的机器语言到汇编语言,并到高级的智能化语言,如visual C++、visual Basic等,不断前进。

汇编语言(Assembly Language)是面向机器的程序设计语言。

在汇编语合中,用助记符( Memoni )代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。

这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。

于是汇编语言亦称为符号语言。

使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。

汇编程序把汇编语言翻译成机器语言的过程称为汇编。

汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。

汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。

高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。

在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。

现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。

汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。

对给定的文件进行加密是当今计算机科学中的一个非常热门话题。

在本课程设计中,目的是给给定的文件进行加密和解密,加密方法有:文件里文本的二进制与10101010B作求和,解密则相应的与10101010B相减。

课设只是把所学的知识加以应用,不能轻视题目的简单,我们要借此机会,加强汇编语言的学习,并加深自己的知识。

在设计中,程序应用了BIOS中一些系统中断,设计了人性化的界面,这些是自学的汇编知识并加以应用,当然也有很多DOS系统的功能调用。

总之,自己结合平时所学和最近的自学,认真的完成课题,并很好的实现了相应的功能。

第二章分析与设计2.1 题目简易加密解密程序2.2 要求编写一个程序能够对某个文件进行简单加密和解密,加密过程要求将文件中所有数据读出,然后将每个字节的读出数据和10101010B作求和运算,实现加密,需要解密时用相应的求差运算。

要求有提示信息。

例如:enter pathname: c:\1.txt2.3 方案设计与论证2.3.1 整体设计思路1.考虑到要读文件内容,所以要先打开文件;2.打开文件之后,读出内容,调用加密子程序,进行加密;3.加密之后,写入文件存档,最后关闭文件。

4.如果要进行解密,先打开文件;5.读出内容,调用解密子程序,进行解密;6.写入文件并存档,最后关闭文件。

2.3.2 方案选择1.对于加密(解密),我们有两种方案:(1)把文件内容加密(解密)之后替换原来内容为加密(解密)内容;(2)把文件内容加密(解密)之后存在缓存区,删除原来文件并新建一个和原来名字一样的文件,存入加密(解密)数据。

对于方案(2)在源文件存入缓冲区之后,源文件可以被删除,但是在创建新的文件的时候,实践的时候无法创建。

然后再考虑到,这种方案比较繁琐,错误的几率比较大。

方案(1)在同一个文件中进行读写,用加密数据将原来的数据覆盖,数据安全性提高的同时,程序设计不再繁琐,所以我们选择方案(1)。

2.对于怎么读文件数据,我们有三种方案:(1)利用汇编语言读文件功能调用,将文件数据分512个字节分批读入内存,加密(解密)后返回给文件;(2)利用汇编语言读文件功能调用,将文件数据每次读一个字节,加密(解密)后返回文件;(3)利用汇编语言读文件功能调用,将文件数据分读8个字节分批读入内存,加密(解密)后返回文件。

从理论上讲,上述方案都可行,但是在实际操作中,发现方案(1)(2),可能由于cpu 处理的问题,在运行中程序都被打断,达不到预期效果,尤其是方案(1)。

最终我们选择方案(2),因为在后期的编写中我们发现方案(2)更加简便,能够避免前面方案出现的问题。

2.4结构框图等设计步骤如图2.4.1为本程序的汇编思路图,由于程序对文件的操作很多,所以编程过程中用到了很多功能调用。

图 2.4.1 汇编思路流程图如图2.4.2为程序使用流程,使用的是按键加解密,用户选择1时,程序执行加密。

用户选择2时,程序执行解密。

图2.4.2 程序运行流程图在拿到课题之前,我们小组讨论可以编写两个程序,一个用来加密,一个用来解密。

但后来发现通过键盘按键可以把加密和解密通过用户选择放在一起,其实加密和解密本来就是逆过程。

第三章实验程序及分析3.1 宏定义1.打开文件的宏(参数:文件名,属性,文件代号)使用了3DH功能调用: 打开文件操作, 得到文件句柄。

调用方式为:DS:DX=文件名的ASCII串地址,(AL)=存取代码,0—为读打开文件,1—为写打开文件,2—为读写打开文件。

若打开的文件存在CF=0 文件代号AX。

fopen macro filename,type,handlemov al,typemov ah,3dHlea dx,filenameint 21Hmov handle,axendm2.改变文件读写指针的宏(文件代号)使用了42H功能调用:移动文件读写指针。

调用方式:调用方式:BX =文件代号,(AL)=确定改变指针的三种方式:0—绝对移动,1—相对移动,2—绝对倒移。

CX(高位字) DX(低位字)—指定一个双字长的偏移可正可负。

若移动文件不成功CF=1错误代码AX。

pianyi macro handlemov ah,42hmov bx,handlemov dx,-1mov cx,-1mov al,1int 21hendm3.写文件的宏(文件代号,缓冲区偏移地址,要写的字节个数)使用了40H功能调用: 据文件代号写磁盘文件。

入口参数DS :DX=输入缓冲区地址、(BX)=文件代号、(CX)=要写入的字节数。

写文件成功CF=0 实际写入的字节数AX。

若磁盘满,实际写入的字节数可能和要求写入的字节数不同。

fwrite macro handle,buffer,sizemov ah,40Hmov bx,handlemov cx,sizelea dx,bufferint 21Hendm4.读文件的宏(文件代号,缓冲区偏移地址,要读的字节个数)使用了3FH功能: 读文件或设备功能。

调用方式:据文件打开取得的文件代号,按照指定的字节数从磁盘中把文件读出, 送入内存预先定义的数据缓冲区中。

BX =文件代号,CX =要读取的字节数,DS:DX=存放输入数据缓冲区的地址。

若读文件成功CF=0实际读取的字节数AX。

fread macro handle,buffer,sizemov ah,3fHmov bx,handlemov cx,sizelea dx,bufferint 21Hendm5.关闭文件的宏(文件代号)3EH功能: 关闭指定文件代号的文件。

入口(BX)=文件代号,关闭文件成功CF=0。

fclose macro handlemov ah,3eHmov bx,handleint 21Hendm6.暂停的宏使用07H号功能调用:直接控制台输入,无回显。

pause macromov ah,07Hint 21Hendm7.返回DOS的宏quit macromov ax,4c00Hint 21Hendm8.提示信息的串输出宏使用09H号调用:字符串输出显示。

(1)调用方式:DS:DX←要输出显示的字符串的首地址,AH←09H(调用号)INT 21H。

该功能调用完成在标准输出设备显示器上输出显示一字符串,字符串必须以字符“$”(24H)为结束标志。

但“$”字符不显示。

print macro msgmov dx,offset msgmov ah,09Hint 21Hendm9.文件名的串输入宏使用0AH号调用:字符串输入(1)调用方式:DS:DX←从键盘接收字符的输入缓冲区首址AH←0AH(调用号)INT 21H(2)说明:1)功能调用完成从键盘接收字符串存到指定内存的输入缓冲区,直到输入回车符时为止。

2)缓冲区的第一个字节为指定缓冲区能接收的字符的个数,缓冲区的第二个字节保留以用作填写实际输入字符的个数,缓冲区的第三个字节开始存放从键盘上输入的字符。

3)若实际输入的字符数少于定义的字节数,则缓冲区内其余字节补零。

gets macro msglea dx,msgmov ah,0AHint 21Hendm3.2 加密模块加密过程:先将从文件读取的数据逐个读入缓冲区,然后调用加密程序进行加密,再把加密后的内容写入缓冲区,最后把缓冲区的内容写入文件。

其中,在写入文件前要确保文件读写指针改变到正确位置,我们编写了一个改变文件指针的宏。

encryex proc nearencryex_start:fread handle_in,buffer,1 ;读取源数据cmp a x,cx ;比较实际长度和读出长度jb encryex_endpianyi handle_in ;修改文件偏移指针call e ncry ;执行加密fwrite handle_in,buffer,1 ;写加密数据jmp encryex_start ;继续读取文件encryex_end: ;加密结束print lines ;输出回车换行fclose handle_in ;关闭文件print succmsg1ret ;返回主程序encryex endp3.3 解密模块解密模块是加密模块的逆过程,将已加密数据读入缓冲区,调用解密子程序,解密后的结果返回缓冲区,在写入文件,同样,写文件前得关键步骤是正确改变文件读写指针。

相关主题