您的当前位置:首页正文

微机原理课程设计加密解密算法

2024-10-18 来源:威能网
武汉理工大学《微机原理与接口技术》课程设计说明书

加密解密程序设计

1设计算法概述

本设计主要采用对密码符号的ASCII码进行变换和反变换来实现加密和解密。将ASCII码从33到126(除控制字符外)的字符分成2部分:ASCII码从33到63的字符为第一部分,ASCII码在64到128之间的字符为第二部分。每个字符加密后均变为2个字符。

第一部分通过查表法加密和解密,先建立62字节的密码表。加密时,因为一个字符加密后变为两个字符,所以ASCII码从33到63的31个字符密码对应62个字符,即62个字节的数据,计算待加密字符ASCII码对33的偏移量,在密码表中,以这个偏移量乘以2为偏移量的字节数据和下一字节数据就是对应密码;解密时,在表中找到相同字型数据时,计算它对表首的偏移,再加33,就是解密后的字符的ASCII码。

第二部分通过判断字符ASCII码的特性来加密和解密。先判断输入字符的ASCII码是否为3的倍数,若是则对应密码的高位字节为35 ('#'),低位字节为本身ASCII码减一;再判断输入字符的ASCII码是否为5的倍数,若是则对应密码的高位字节为37(‘%’),低位字节为本身ASCII码减3;最后判断输入字符的ASCII码是偶数还是寄数,偶数的密码高字节为38(‘&’),低字节为本身ASCII码加1,奇数的密码高字节为39(‘'’),低字节为本身ASCII码加3 。解密的时候先判断高字节数据,若高字节数据位35、37、38、39则舍去高位字节,低位字节分别进行相应的解密,就得到原码。

2主程序设计

2.1主程序的功能

主程序主要是人机交互部分,提示输入信息和功能选择。程序开始,提示用

1

武汉理工大学《微机原理与接口技术》课程设计说明书

户选择相应的功能:按E、e调用加密子程序,进入加密状态,按R、r调用解密子程序,进入解密状态,按Esc退出程序,若输入错误则再次提示输入功能选择。

2.2主程序流程图

主程序流程图如图1所示。

图1 主程序流程图

2

武汉理工大学《微机原理与接口技术》课程设计说明书

2.3主程序汇编代码分析

主程序汇编代码分析如下:

main proc far ; 主程序 start:mov ax,data

mov ds,ax

mov dx,seg first_message ;提示输入信息dos-09h,ds:dx为首地址 mov ds,dx

mov dx,offset first_message mov ah,09h int 21h

mainloop:mov dx,seg second_message mov ds,dx

mov dx,offset second_message mov ah,09h int 21h

inputagain:mov ah,01h int 21h

cmp al,1bh je over ;输入为ESC,跳转到结束 cmp al,45h je jiamicall cmp al,65h je jiamicall ;输入为e,E,调用加密程序 cmp al,52h je jiemicall cmp al,72h je jiemicall ;输入为r,R,调用解密程序 jmp mainloop jiamicall:call jiami jmp mainloop jiemicall:call jiemi jmp mainloop

over:mov dx,seg message3 ;提示结束 mov ds,dx

mov dx,offset message3 mov ah,09h int 21h

mov ax,4c00h ;程序退出 int 21h main endp code ends

3

武汉理工大学《微机原理与接口技术》课程设计说明书

end main

3加密程序设计

3.1 加密字符筛选程序

3.1.1加密字符筛选程序描述

本段程序用以筛选输入字符,将ASCII码在33到63之间的字符作为第一部分,ASCII码在64到126之间的字符作为第二部分,然后分别进行加密,两种加密方法完全不同。如果输入控制字符即ASCII码小于33或者为127的时候,程序提示输入错误,并从新读取键盘输入。

3.1.2字符筛选程序流程图

图2 字符筛选程序流程图

4

武汉理工大学《微机原理与接口技术》课程设计说明书

3.1.3字符筛选部分程序代码分析

字符筛选部分程序代码分析如下: jiami proc near call input_data lea di,buf jiami_loop:mov ah,01h int 21h cmp al,1bh je call_xianshi_jiami cmp al,7fh je error_loop add al,0 cmp al,33 js error_loop add al,0 cmp al,64 js call_table_jiami jmp call_chengfa_jiami error_loop:mov dx,seg message_error mov ds,dx mov dx,offset message_error mov ah,09h int 21h jmp jiami_loop

call_table_jiami:call table_loop jmp jiami_loop

call_chengfa_jiami:call second_jiami jmp jiami_loop

call_xianshi_jiami:call xianshi_jiami ret jiami endp

;提示输入

;取密码存储首地址 ;从键盘读取一个字符 ;判断是否为ESC ; 到显示子程序 ;判断是否为del

; 判断是否输入控制字符

; 清除sf 标志位

;判断字符ASCII码是否小于64 ;调用查表加密 ;调用第二部分加密 ;输入错误

;提示信息

3.2查表加密程序设计

3.2.1查表加密描述

将待加密字符ASCII码在33到63之间的字符称为第一部分,第一部分采用查表的方法加密,每个字符对应两个字节的密码,也就是两个字符,密码表如

5

武汉理工大学《微机原理与接口技术》课程设计说明书

图2所示。进行加密的时候,只要将输入字符的ASCII码减去33,再以它作为密码表格的偏移量,就可以查到密码。如输入字符‘ % ’,其ASCII码为37 ,37-33=4 ,表格中偏移为4的密码为7626h ,即‘ &v ’为密码。在程序数据段中预先输入密码表,即建立一个31个字型数据的数组来存放密码,加密的时候,以偏移量来调用数组的元素,就是密码。没加密一个字符,将加密后的密码存入预先定义好的数组中,显示的时候先显示低字节,在显示高字节。

表一 密码表

原码 33 34 35 36 37 38 39 40 密码 7e22h 7c3eh 7a23h 783ch 7626h 743ah 7228h 7038h 原码 41 42 43 44 45 46 47 48 密码 682ah 6638h 642ch 6236h 602eh 5834h 5630h 6032h 原码 49 50 51 52 53 54 55 56 密码 5857h 7d56h 596fh 3679h 5877h 5675h 5473h 5271h 原码 57 58 59 60 61 62 63 — 密码 507eh 4e41h 4c43h 4a45h 484dh 4667h 4440h — 3.2.2查表加密汇编代码分析

本程序段主要用到查表指令xlat,将表格的段地址放入ds,偏移地址放入dx,偏移量放入al中,查表后结果存放在al中。对代码的分析如下: table_loop proc near mov dx,seg table2 mov ds,dx mov bx,offset table2 sub al,33 add al,al mov dl,al xlat mov cl,al mov al,dl add al,1 xlat

;取密码表首地址

;暂存al(输入字符的ASCII码) ;查表

;将密码低字节存入cl ;再取密码高字节存入ch

6

武汉理工大学《微机原理与接口技术》课程设计说明书

mov ch,al mov dx,seg buf mov ds,dx mov [di],cx mov ax,0024h mov [di+2],al inc di inc di ret table_loop endp

;取密码存储单元首地址

;将密码存入存储区得带加;密完成后显示

在程序最后面,密码存储完后,下一单元存入0024h,24h是符号‘ $ ’的ASCII码,这样可以在显示的时候钓友dos的09h号功能,直接显示字符串,很方便。

3.3第二部分加密程序设计

3.3.1第二部分加密程序设计描述

如果输入字符的ASCII码不在第一部分范围内,则用第二部分加密。这一部分的加密方法主要是通过判断输入符号ASCII码的数学特性来进行加密。加密的主要方法如表所示,如果原码是3的倍数,则密码的高字节为‘#’(35),低字节为本身的ASCII码减1;如果原码是5的倍数,则密码的高字节为‘%’(37),低字节为本身的ASCII码减3;如果原码是偶数,则密码的高字节为‘&’(38),低字节为本身的ASCII码加1;如果原码是寄数,则密码的高字节为‘ ’’(39),低字节为本身的ASCII码加3 。因为程序是顺序判断执行的,所以先判

表二 第二部分加密方法表

原码 高字节 是3的倍数 是5的倍数 是偶数 是寄数 ‘#’(35) ‘%’(37) ‘&’(38) ‘ ’’(39) 密码 低字节 al-1 al-3 al+1 al+3 7

武汉理工大学《微机原理与接口技术》课程设计说明书

断是否为3的倍数,在判断是否为5的倍数,然后判断奇偶,这样就不会出现混淆出错的情况。

3.3.2第二部分加密程序设计流程图

第二部分加密程序流程图如图所示,先判断是否为3的倍数,再判断是否为5的倍数,然后判断奇偶。

图3 加密程序流程图

3.3.3第二部分加密程序设计代码分析

程序代码如下,先判断al是否为3的倍数,再判断是否为5的倍数,然后判断奇偶性,顺序判断,满足则跳转调用子程序加密,保存数据。

8

武汉理工大学《微机原理与接口技术》课程设计说明书

second_jiami proc near mov dl,al ;暂存al mov ah,0 mov bl,3 div bl ;al除以3 add ah,0 ;判断余数是否为0 jz call_div3_jiami ;是0则跳转 mov al,dl mov ah,0 ;清楚ah中的数 mov bl,5 div bl ;al除以5 add ah,0 ;判断余数是否为0 jz call_div5_jiami ;是0则跳转 mov al,dl test al,01h ;判断al的奇偶性 jz call_oushu_jiami ;偶数跳转 call jishu_jiami jmp jiami_loop sj_ret:ret

call_div3_jiami:call div3_jiami jmp sj_ret ;返回 call_div5_jiami:call div5_jiami jmp sj_ret

call_oushu_jiami:call oushu_jiami jmp sj_ret second_jiami endp

如果al是3的倍数调用的子程序div3_jiami如下,在最后两个字节中存入了数据24h,是为了在显示的时候调用dos的字符串显示功能。 div3_jiami proc near mov bx,seg buf mov ds,bx mov ah,35; mov al,dl sub al,1 mov [di],ax mov ax,0024h mov [di+2],ax inc di inc di ret

div3_jiami endp

;取存储区地址

;符号‘#’的ASCII码

;待加密符号在上一程序中暂存过 ;减1

;将两个字节数据送存储区

;指向下一单元

9

武汉理工大学《微机原理与接口技术》课程设计说明书

3.4密码显示程序代码分析

密码显示程序如下,先判断开始的2个字节是否为0024h,用来判断是否有密码以经保存,如果有密码已经保存了就显示所有密码再退出,否则退出。 xianshi_jiami proc near call huanhang mov dx,seg buf mov ds,dx lea di,buf mov ax,[di] cmp al,0024h jz call_no_code call huanhang mov dx,seg codeis mov ds,dx lea dx,codeis mov ah,09h int 21h mov dx,seg buf mov ds,dx lea dx,buf mov ah,09h int 21h

ret_back:call huanhang call huanhang ret call_no_code:call no_code jmp ret_back xianshi_jiami endp

;显示换行

;取密码存储区首地址 ;去第一个字型数据 ;判断是否存储了数据

;有数据,换行显示

;显示提示信息

;显示存储区信息

;两次换行,提高视觉效果 ;返回

4解密程序设计

4.1解密程序设计描述

解密是加密操作的反动作,只要依照加密的方法,一步步返回去,就可以将两个字节的密码变为加密钱的单字节字符。

首先判断密码的高字节是否为35、37、38、39,若高字节是这些数中的一个,那么舍去高字节数据,分别将低字节的数加1、加3、减1、减3,就得到了原码。

10

武汉理工大学《微机原理与接口技术》课程设计说明书

如果密码的高位不是上面的四个数之一,那么需要通过查表找到字型密码在密码表中的偏移量,在将偏移量加33就是密码。

如果输入控制字符或者输入没有原码的两个字符时,程序将提示输入错误,要求重新输入密码。

4.2解密程序流程图

4.2.1解密字符筛选流程图

解密程序流程图如图所示,如果输入的是Esc则退出,如果输入的是控制字符,则提示输入错误,提示重新输入。State是在数据段定义一个字节数据做全局变量,初始值设为0,用来指示输人字节的状态,当输入两个字节后调用函数jiemi_data,解密已存在bx中的一个字型数据。

图4 解密字符筛选流程图

4.2.2解密程序流程图

11

武汉理工大学《微机原理与接口技术》课程设计说明书

解密程序流程图如下所示,先判断bh的数值,再调用不同的方法解密数据。如果bh=35,执行bl=bl+1;如果bh=37,执行bl=bl+3;如果bh=38,执行bl=bl-1;如果bh=39,执行bl=bl-3;如果bh不是这些数,则逐个取table2中的双字节数据到dx与bx比较,如果相等,就找到了密码,计算出计数寄存器cx的变化值,再加上34就是解密后的数据ASCII码。如果输入的是其他数据,那么提示输入密码错误,没有这个密码当然不能解密了。

图5 解密程序流程图

4.2.3解密程序代码分析

jiemi_data proc near cmp bh,40 js call_second_jiemi call table_jiemi

12

;高位< 40???

;bh>40第二部分解密 ;否则查表解密

武汉理工大学《微机原理与接口技术》课程设计说明书

jiemi_data_ret:ret ;返回 call_second_jiemi:call second_jiemi jmp jiemi_data_ret

jiemi_data endp

;************************查表解密子程序 table_jiemi proc near mov dx,seg table2 mov ds,dx lea si,table2

mov cx,0031h mov ax,bx

scan_code:mov dx,[si] cmp ax,dx jz find_code inc si inc si

loop scan_code

call rong_code rret:ret find_code:mov bl,30h sub bl,cl add bl,34 mov dx,seg buf1 mov ds,dx

mov [di],bl mov al,24h mov [di+1],al inc di jmp rret table_jiemi endp

second_jiemi proc near mov dx,seg buf1 mov ds,dx cmp bh,35 jz div3_jiemi cmp bh,37 jz div5_jiemi cmp bh,38 jz oushu_jiemi cmp bh,39 jz jishu_jiemi call rong_code second_jiemi_ret:ret ;取table2首地址 ;设置计数初值 ;取table元素 ;比较、判断 ;提示密码错误 ;返回 ;找到密码后计算计数变化 ;;得到密码 ;保存到存储区 ;存储区以24h结尾

;第二部分解密程序开始 ;判断是否高位bh为35 ;判断是否高位bh为37 ;判断是否高位bh为38 ;判断是否高位bh为39 ;否则提示密码错误 ;程序结束

13

武汉理工大学《微机原理与接口技术》课程设计说明书

5程序运行结果

程序的运行结果如图所示,提示后选择加密或者解密功能,选择加密,输入原码123#b ,按Esc退出加密,输出密码为WXV}oY#zc& ,再选择解密,输入WX V} oY #z c& ,按Esc退出,输出解密后的原码为123#b 。多次运行程序正确。

图6 程序运行结果

14

武汉理工大学《微机原理与接口技术》课程设计说明书

6心得体会

本次微机原理课程设计中,这个加密解密程序设计对我来说很有意义,开始拿到题目的时候什么都不懂,不知道从何下手,通过认真查阅资料,仔细思考分析,细心编写调试源代码,最后完成了加密解密程序的基本功能。

数据的加密功能是利用对数据的ASCII码进行运算变换,使它改写为另一个或多个数据,隐藏了原始数据,使他人不能看到,从而保证了原数据的安全。数据的解密则是根据加密算法设计的,它与加密互为逆过程,能够使加密后的数据复原。

在程序设计、编写和调试中,完成了从课本理论知识到实际动手的基本过程,将所学的课本知识运用到了实际的程序编写中,让我受益匪浅。了解到了计算机程序设计的一般步骤,大型的软件程序设计完成都要经过很多个步骤,每步都必须一丝不苟,才能少走弯路,顺利完成工作。

15

武汉理工大学《微机原理与接口技术》课程设计说明书

参考文献

[1]周佩玲.微机原理与接口技术.北京:电子工业出版社,2005

[3]李珍香.汇编语言课程设计案例精编.北京:中国水利水电出版社,2004 [4]沈美明.IBM-PC汇编语言程序设计.北京:清华大学出版社,2000 [5]贺亚茹.汇编语言程序设计.北京:科学出版社,2005

[6]卜艳萍、周伟.汇编语言程序设计教程.北京:清华大学出版社,2004

16

因篇幅问题不能全部显示,请点此查看更多更全内容