微机原理课程设计加密解密算法
加密解密程序设计
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主程序的功能
主程序主要是⼈机交互部分,提⽰输⼊信息和功能选择。程序开始,提⽰⽤
户选择相应的功能:按E、e调⽤加密⼦程序,进⼊加密状态,按R、r调⽤解密⼦程序,进⼊解密状态,按Esc退出程序,若输⼊错误则再次提⽰输⼊功能选择。
2.2主程序流程图
主程序流程图如图1所⽰。
图1 主程序流程图
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
end main
3加密程序设计
3.1 加密字符筛选程序
3.1.1加密字符筛选程序描述
本段程序⽤以筛选输⼊字符,将ASCII码在33到63之间的字符作为第⼀部分,ASCII码在64到126之间的字符作为第⼆部分,然后分别进⾏加密,两种加密⽅法完全不同。如果输⼊控制字符即ASCII码⼩于33或者为127的时候,程序提⽰输⼊错误,并从新读取键盘输⼊。
3.1.2字符筛选程序流程图
图2 字符筛选程序流程图
3.1.3字符筛选部分程序代码分析
字符筛选部分程序代码分析如下:
jiami proc near
call input_data ;提⽰输⼊
lea di,buf ;取密码存储⾸地址
jiami_loop:mov ah,01h
int 21h ;从键盘读取⼀个字符
cmp al,1bh ;判断是否为ESC
je call_xianshi_jiami ; 到显⽰⼦程序
cmp al,7fh
je error_loop ;判断是否为del
add al,0
cmp al,33 ; 判断是否输⼊控制字符
js error_loop
add al,0 ; 清除sf 标志位
cmp al,64 ;判断字符ASCII码是否⼩于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
3.2查表加密程序设计
3.2.1查表加密描述
将待加密字符ASCII码在33到63之间的字符称为第⼀部分,第⼀部分采⽤查表的⽅法加密,每个字符对应两个字节的密码,也就是两个字符,密码表如
图2所⽰。进⾏加密的时候,只要将输⼊字符的ASCII码减去33,再以它作为密码表格的偏移量,就可以查到密码。如输⼊字符‘% ’,其ASCII码为37 ,37-33=4 ,表格中偏移为4的密码为7626h ,即‘&v ’为密码。在程序数据段中预先输⼊密码表,即建⽴⼀个31个字型数据的数组来存放密码,加密的时候,以偏移量来调⽤数组的元素,就是密码。没加密⼀个字符,将加密后的密码存⼊预先定义好的数组中,显⽰的时候先显⽰低字节,在显⽰⾼字节。
表⼀密码表
原码密码原码密码原码密码原码密码
33 7e22h 41 682ah 49 5857h 57 507eh
34 7c3eh 42 6638h 50 7d56h 58 4e41h
35 7a23h 43 642ch 51 596fh 59 4c43h
36 783ch 44 6236h 52 3679h 60 4a45h
37 7626h 45 602eh 53 5877h 61 484dh
38 743ah 46 5834h 54 5675h 62 4667h
39 7228h 47 5630h 55 5473h 63 4440h
40 7038h 48 6032h 56 5271h ——
3.2.2查表加密汇编代码分析
本程序段主要⽤到查表指令xlat,将表格的段地址放⼊ds,偏移地址放⼊dx,偏移量放⼊al中,查表后结果存放在al中。对代码的分析如下:
table_loop proc near
mov dx,seg table2
mov ds,dx

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。