加密解密程序设计课程设计说明书Word文件下载.docx
《加密解密程序设计课程设计说明书Word文件下载.docx》由会员分享,可在线阅读,更多相关《加密解密程序设计课程设计说明书Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
初始条件:
掌握8086汇编语言程序设计方法,设计不同的加密算法并完成对数据的加密和解密工作。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.程序运行后,首先显示‘PleaseInputData:
’,并响铃一声,然后从键盘接受以字母开始的101个字节型数据,若首字母为‘E’,则将后续的100个数据进行加密后,显示在屏幕上;
若首字母为‘R’,则将后续的100个数据解密,并显示在屏幕上。
2.撰写课程设计说明书。
内容包括:
摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:
设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:
2012年12月30日-----12月31日查阅资料及方案设计
2013年01月01日-----01月05日编程
2013年01月06日-----06月08日调试程序
2013年01月09日-----01月10日撰写课程设计报告
指导教师签名:
2013年01月11日
系主任(或责任教师)签名:
年月日
摘要
计算机是通过执行指令序列来工作的,每种计算机都有一组指令集提供给用户使用,这组指令集称为该计算机的指令系统。
8086CPU的指令系统不仅包含8位机的全部指令,而且增加了一些功能较强的16位数据处理指令,如乘法,除法指令,因而同时具有8位和16位的处理能力。
汇编语言是与机器语言密切相关的,是面向机器的语言。
高级语言编写的程序,会编译成机器语言在CPU中执行,如VisualC++等。
由于机器语言与汇编语言是一一对应的,因此就可将机器语言转化成汇编语言,这个过程称之为反汇编。
而汇编语言可能读性是比较好的,这样就可分析程序流程,解析其功能了,这个过程就是解密(俗称破解)。
也就是说,解密的基础是建立在汇编语言级别上的,汇编语言是大学计算机的必修课,这方面的书籍品种很多,虽然大多书本是以DOS汇编为讲解平台,但对理解汇编指令功能是没影响的。
掌握加密解密这方面技术,可以提高自己的调试技能,并且能了解他人程序思路,使自己写出更好的程序。
研究解密技术有助于掌握一些系统底层知识,系统底层知识绝对是构造起大型软件的坚实基础。
本次设计就是要用8086汇编语言设计一个程序,使它能够对网络信息的原始数据进行加密保护和解密使用。
信息的传输则是通过公共信道这些通道基本是是不设防的,很脆弱的,很容易受到攻击和破坏,因而需要一种措施来保护我们的数据,防止被一些用心不良的人盗取或破坏。
数据加密和解密功能的实现是利用对数据的ASCII码进行加减运算,使它改写为另一组数据,隐藏了原数据,使他人不能看到,从而保证了原数据的安全。
加密(incode):
对明文(可读懂的信息)进行翻译,使用不同的算法对明文以代码形式(密码)实施加密。
该过程的逆过程称为解密(descode),即将该编码信息转化为明文的过程。
关键词:
加密解密汇编语言数据保护
1设计任务及要求
1.1程序设计任务
程序运行后,首先显示‘PleaseInputData:
’,并响铃一声,然后从键盘接受以字母开始的101个字节型数据,如果首字母为‘E’,则将后续的100个数据进行加密后,显示在屏幕上;
如果首字母为‘R’,则将后续的100个数据解密,并显示在屏幕上。
1.2程序设计要求及目的
撰写课程设计说明书。
程序设计的目的是通过亲自实践,亲自动手以加强和巩固课本上的知识,消除课堂上遇到的疑惑;
通过课程设计培养独立动手和独立思考的能力,提高自主创新思维水平;
了解和熟练汇编语言中的各种指令,学会编写汇编程序;
学会查找资料,应用资料,并养成分类收藏资料的习惯。
1.3需求分析
(1)要求处理命令行参数。
(2)基本的算术运算和逻辑位运算。
(3)用汇编实现简单程序编写并调用子程序。
(4)DOS功能调用中有关响铃、字符串输出的指令。
(5)可执行程序的参数使用。
(6)综合解决问题的能能力。
2汇编语言之加密解密技术
2.1汇编语言简介
汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,在不同的设备中,汇编语言对应着不同的机器语言指令集。
一种汇编语言专用于某种计算机系统结构,而不像许多高级语言,可以在不同系统平台之间移植。
使用汇编语言编写的源代码,需要通过使用相应的汇编程序将它们转换成可执行的机器代码。
这一过程被称为汇编过程。
汇编语言采用了助记符来代表特定低级机器语言的操作。
特定的汇编目标指令集可能会包括特定的操作数。
许多汇编程序可以识别代表地址和常量的标签(l和符号,这样就可以用字符来代表操作数而无需采取写死的方式。
普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的。
汇编语言不像其他大多数的程序设计语言一样被泛用于程序设计;
在今天的实际应用中,它通常被应用在底层硬件操作和高要求的程序优化的场合。
驱动程序、嵌入式操作系統和实时运行程序都需要组合语言。
2.2加密解密技术简介
加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。
加密技术包括两个元素:
算法和密钥。
算法是将普通的信息或者可以理解的信息与一串数字(密钥)结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解密的一种算法。
在安全保密中,可通过适当的钥加密技术和管理机制来保证网络的信息通信安全。
软件的加密与解密是一个迷人的研究领域,它几乎可以与任意一种计算机技术紧密结合——密码学、程序设计语言、操作系统、数据结构
常用数据加密算法有:
数据加密算法有很多种,按照发展进程来分,经历了古典密码、对称密钥密码和公开密钥密码阶段,古典密码算法有替代加密、置换加密;
对称加密算法包括DES和人AES;
非对称加密算法包括RSA、背包密码、McEliece密码、Rabin、椭圆曲线、EIigamalD-H等。
目前在数据通信中使用最普遍的算法有DESDESDESDES算法、及RSARSARSARSA算法和PGP算法等。
2.3加密的目的
加密用于达到以下目的:
(1)保密性:
帮助保护用户的标识或数据不被读取。
(2)数据完整性:
帮助保护数据不被更改。
(3)身份验证:
确保数据发自特定的一方。
(4)不可否认性:
防止特定的一方否认发送过消息。
为了达到这些目的,可以使用算法和惯例的组合来创建加密方案。
私钥加密即对称加密对数据执行转换,使第三方无法读取该数据。
此类型的加密使用单个共享的机密密钥来加密和解密数据。
公钥加密即不对称加密,对数据执行转换,使第三方无法读取该数据。
此类加密使用公钥/私钥对来加密和解密数据。
加密签名,通过创建对特定方唯一的数字签名来帮助验证数据是否发自特定方。
加密哈希,将数据从任意长度映射为定长字节序列,哈希在统计上是唯一的;
不同的双字节序列不会哈希为同一个值。
学习加密解密这方面技术,对自身的提高很有好处。
可以通过跟踪软件,提高自己的调试技能,并且能了解他人程序思路,使自己写出更好的程序。
有助于掌握一些系统底层知识,系统底层知识绝对是构造起大型软件的坚实基础。
许多程序发展,都经历了这一锻炼过程的。
加密解密并非只有汇编一种语言可以用,之所以使用汇编语言进行加密解密是为了更好地掌握汇编语言,并把理论所学运用到实践中,检验自己是否真正学会,并在此过程中提高自己的编程能力,调试能力。
学习汇编语言是我们学习其他语言的敲门砖,因此这次课程设计意义很大,加密解密技术在实际生活中运用也很广泛,值得一学。
3方案设计
3.1加密方式
数据的加密解密有很多种算法,其中最基础的就是加、减、乘、除以及逻辑运算等算法,在这几种基本算法的基础上可以设计出更复杂更安全更能让人难以破解加密解密算法。
没有万能的算法,任何算法都是可以被破解的,加密的作用就是在时间上加设门槛。
凯撒加密法是一种简单的消息编码方式:
它根据字母表将消息中的每个字母移动常量位k。
举个例子如果k等于4,则在编码后的消息中,每个字母都会向前移动4位:
a会被替换为e;
b会被替换成f;
依此类推。
字母表末尾将回卷到字母表开头。
于是,w会被替换为a,x会被替换为b。
3.2方案比较
方案一:
设计自己的密钥,然后对需要加密的数据先左移4位,再对其进行异或,得到加密后的数据,解密只需再次异或移位便可得到。
方案二:
对需要加密的数据进行分类,数字则减1加密,字母则加4加密,得到加密后的数据,解密只需对数字加1,字母减4。
对数据进行异或加密容易超出字母和数字表示范围,产生特殊符号和图案,不易控制,这次设计主要针对普通数字和字母的加密,因此方案二比较适合。
3.3设计思路
本次设计主要针对输入的数字和字母进行加减加密,采用的方法为输入数据后,若第一个数据为E或e则把e或E后面的数字减1字母加4做为加密后的数据,若要对一组数据解密,则输入R或r并在其后输入想要解密的数据,程序运行后便会还原数据,得到解密后的数据。
加密过程中会由于加密后数据超出数字或字符可以表示的范围,数子9加1后超出范围,因此可以用9减去9,得0来表示数字9加密后的数据;
字母W/w,X/x,Y/y,Z/z加4后也会超出字母表示范围,因此可以减去26,得A/a,B/b,C/c,D/d分别作为其加密后的数据。
4设计功能模块概述
4.1程序所需模块
根据程序设计要求,可写出该程序所需各主要的功能模块:
字符循环输入模块、字符串输出模块、响铃模块、功能选择模块、加密模块、解密模块、程序退出模块。
程序功能模块流程图如图4-1所示。
图4-1程序功能模块流程图
4.2程序运行界面
字符串显示子程序流程图如图4-2所示。
图4-2字符串显示子程序流程图
好看的运行界面可以给用户一种赏心悦目的感觉,本次设计主要利用汇编语言编写程序并在DOS环境下运行,因此可以使用DATASEGMENT指令定义数据段显示自己设计的界面。
可以加入自己设计的图案或字符串,采用9号功能调用,输出多字符串,因此其结尾必须以‘$’结尾,自定义界面程序代码格式如下:
DATASEGMENT
HEADMSGDB0DH,0AH‘ ’,'
$'
字符串显示过程子程序程序代码如下:
DISPPROCNEAR;
显示字符串子程序
MOVAH,9
INT21H
RET
DISPENDP
4.3响铃程序
根据设计要求,程序运行后,首先显示‘PleaseInputData:
’,并响铃一声,响铃程序可以利用2号功能调用,07H为响铃的ASCII码,响铃程序代码如下:
MOVDL,07H;
设置响铃声
MOVAH,2
INT21H;
输出响铃声
4.4功能选择程序
用比较指令CMP选择所需程序实现的功能,如果输入的字符串首字符为E或e则进入加密子程序;
如果输入的字符串中首字符为R或r则进入解密子程序;
如果输入的字符串中首字符为Q或q则进入退出子程序。
如果输入的字符中首字符非前三种情况则会提醒你再次输入,直到输入的首字符为前面三种情况中的一种为止。
功能选择程序流程图如图4-3所示。
图4-3功能选择程序流程图
4.5数据循环输入子程序
采用1号DOS功能调用命令,循环输入单个字符并保存数据,加密解密均是以单个字符为单位进行,这样就不会由于一个字符加密后产生的进位影响到其他字符,造成加密解密结果失真。
采用的是FOR循环语句,并在输入最后一个字符后,加‘$’字符结束输入,直至键入回车符终止子程序返回主程序,因此还要用到比较指令CMP或TEST指令。
循环输入程序流程图如图4-4所示。
图4-4循环输入程序流程图
4.6加密过程程序
主要针对输入的数字和字母进行加密,采用的方法为,输入数据后,若第一个数据为E或e,则把e或E后面的数字减1字母加4作为加密后的数据。
对于数字0减1后小于0,需直接加上9,变成9,对于W/w,X/x,Y/y,Z/z加4后会超出字母范围因此需减去26,变为A/a,B/b,C/c,D/d。
程序中判断语句应用CMP或者TEST指令以免产生运算结果,破坏数据。
由于是一位一位的进行数据加密,因此需要时刻判断当前字符是否为‘$’,因为字符串是以‘$’结尾的。
加密过程的关键在于,判断字符类型及加密后如何对数据进行保存并保护,该过程中对子程序的调用应用非常多,可见子程序对于程序的重要作用。
加密过程程序流程图如图4-5所示。
图4-5加密过程程序流程图
4.7解密过程程序
解密为加密的逆过程,即输入数据后,若第一个数据为R或r,则把R或r后面的数字加1字母减4作为解密后的数据。
由于数字0减1后小于0,需直接加上9变为9,对于W/w,X/x,Y/y,Z/z加4后会超出字母范围因此需减去26变成A/a,B/b,C/c,D/d。
因此当输入数据9以后,应直接将其减9变为0,当输入A/a,B/b,C/c,D/d时,应先减去4再加上26,变成W/w,X/x,Y/y,Z/z。
和加密过程类似,也许判断输入字符是否为‘$’,以决定是否完成输入进行解密过程。
不同类型所以加密算法不同,因此解密的关键就是运用对应加密算法的逆运算进行解密,可见对字符类型的判断很重要。
解密过程程序流程图如图4-6所示。
图4-6解密过程程序流程图
4.8退出程序
当第一个输入数据为字母Q/q时,开始运行退出程序,提示“DOYOUWANTTOEXITTHISPROGRAM?
(Y/N):
”输入Y则退出程序,输入N则提示:
“PLEASEINPUTDATA:
”。
退出程序所用指令较为简单,就是简单地9号DOS功能调用字符输入、CMP比较判断指令、以及基本的跳转指令即可实现。
退出程序虽然简单,但在程序中的重要性不言而喻,退出程序不当会给用户以不好的客户体验,甚至造成数据丢失,程序运行失败等问题。
退出程序流程图如图4-7所示。
图4-7退出程序流程图
5总体程序及运行结果
5.1总体程序流程图
将前面介绍的各个模块连接起来即为完整的加密解密程序,程序完整代码见附录部分。
整体程序流程图如图5-1所示。
图5-1整体程序流程图
5.2程序调试
(1)在编写代码时,我遇到了很多问题,例如简单的跳转指令在程序中有字节范围限制,因此要用到子程序调用,然而子程序的调用我都没怎么接触过,所以要去查资料在翻阅资料和阅读相关的例子后,终于了解并掌握了子程序的功能。
(2)写完代码,进入到程序的调试阶段,在这里遇到很多的问题。
1)在定义显示的菜单界面的时候,因为是输出字符串,而在字符串后没用‘$’结束,出现错误。
出现这一问题,是因为运用9号功能调用,其结尾的那一个字符必须是‘$’,只需在其结尾加上‘$’就可以。
2)在用到接收的单个字符时,直接用寄存器来存储,当要调用时,就没发现已不存在了,调试时就出现了错误。
为了解决这个问题,我们可以开辟一个内存空间,把输入的单个字符存入里面,连回车字符也存入,当要调用时,就把这空间的首个单元取出便可。
3)在运用比较CMP的跳转时,当超过128个字节时,编译时就会出错。
解决这个问题可以在跳转语句和被跳转的语句之间加个中间量,这样就可以在编译时没问题了。
4)程序运行后出现乱码现象,解决之一问题需要在调用输出子程序前,将以前存入的旧数据清零,可使用指令XOR,AND等。
5.3程序运行结果
在接口试验平台集成环境中运行该程序,点击汇编、连接、运行后得到程序显示的菜单界面。
自定义的菜界面里有显示此程序的使用方法并提示输入数据(PLEASEINPUTDATA:
),对程序的使用非常方便,这种人机交互式的软件程序最易被用户承认并喜爱。
程序运行菜单界面如图5-2所示。
图5-2程序运行菜单界面
输入数据EW5ZCS按回车键运行程序,界面上显示的锁形表示数据已加密,为AD4GW。
程序加密界面如图5-3所示。
图5-3程序加密界面
输入数据R4DAGW按回车键后程序运行,图中显示的钥匙形表示数据已解密,为WZ5CS。
程序解密界面如图5-4所示。
图5-4程序解密界面
如果想退出程序则输入字母Q或q,按回车键运行后结果如图5-5所示,提示“DOYOUWANTTOEXITTHISPROGRAM?
程序退出选择界面如图5-5所示。
图5-5程序退出选择界面
输入Y或y程序结束,回到集成环境窗口。
输入N或n回到程序开始菜单,提示“PLEASEINPUTDATA:
”,运行后如图5-6。
返回程序开始菜单界面如图5-6所示。
图5-6返回程序开始菜单界面
如果输入数据不是E/e,R/r,Q/q,运行程序,同样提示“PLEASEINPUTDATA:
”,运行后如图5-7。
输入错误界面如图5-7所示。
图5-7输入错误界面
6课程设计收获及心得体会
本次设计用的是8086汇编语言来设计程序,使它能够对网络信息的原始数据进行加密保护和解密使用。
作为自动化专业的学生,对计算机的使用是不可避免的,本专业很多方面都必须要通过计算机来实现。
计算机已成了我们学习和工作必不可少的工具,然而计算机作为网络中的核心部分也是最不安全的,大量的信息用数据的形式存放在计算机系统里。
信息的传输则是通过公共信道。
这些计算机系统和信道是不设防的,很脆弱的,很容易受到攻击和破坏,因而我们需要一种措施来保护我们的数据,防止被一些用心不良的人盗取或破坏。
这次微机原理课程设计让我学到很多很多的的东西,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,解决了很多疑惑。
通过课程设计,我了解和熟练汇编语言中的各种指令,学会编写汇编程序,培养了独立动手和独立思考的能力,提高自主创新思维水平,学会了查找资料,应用资料,并养成分类收藏资料的习惯。
以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序流程图出来,但是我总觉得这样做没必要,很浪费时间。
但是,这次课程设计改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序流程图是很有必要的。
因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
参考文献
[1]彭虎,周佩玲,傅忠谦.微机原理与接口技术(第3版).北京:
电子工业出版社,2011.8.
[2]RichardC.Detemer(作者),郑红(译者),陈丽琼(译者),8086汇编语言基础教程.北京:
机械工业出版社,2009.
[3]温玉杰.Intel汇编语言程序设计(第四版).北京:
电子工业出版社,2004.
[4]卜艳萍,周伟.汇编语言程序设计教程.北京:
清华大学出版社,2004.
[5]沈美明.IBM-PC汇编语言程序设计.北京:
清华大学出版社,2000.
[6]段钢.加密与解密(第3版).北京:
电子工业出版社,2008.
[7]王爽.汇编语言(第2版).北京:
清华大学出版社,2008.
附录
本次设计的完整程序代码如下:
DATASEGMENT;
HEAD0DB'
'
0DH,0AH
DB'
+-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*'
0DH,0AH
|WELCOME!
*'
*
(1)IFYOUWANTTTOENCRYPT|'
|PLEASEINPUTEOReFIRST,THEN,IUPUTOTHERLETTERS*'
*
(2)IFYOUWANTTODECRYPT|'
|PLEASEINPUTRORrFIRST,THEN,IUPUTOTHERLETTERS*'
*(3)IFYOUWANTTOEXITTHISPROGRAM|'
|PLEASEPRESSQORq!
0DH,0AH,'
HEAD1DB0DH,0AH,'
PLEASEINPUTDATA!
'
HEAD2DB'
DB'
************'
****'
**************'
****************'
******************'
******LOCKED******'
DB0DH,0AH,'
AFTERENCRYPTING:
'
HEAD3DB'
*************'
***************'
*****************'
******UNLOCK*****'
AFTERTRANSLATING:
HEAD4DB0DH,0AH,'