




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学微机原理与接口技术课程设计说明书加密解密程序设计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,axmov dx,seg first_message ;提示输入信息dos-09h,ds:dx为首地址 mov ds,dxmov dx,offset first_messagemov ah,09hint 21hmainloop:mov dx,seg second_messagemov ds,dxmov dx,offset second_messagemov ah,09hint 21hinputagain:mov ah,01hint 21hcmp al,1bhje over;输入为ESC,跳转到结束cmp al,45hje jiamicallcmp al,65hje jiamicall;输入为e,E,调用加密程序cmp al,52hje jiemicallcmp al,72hje jiemicall;输入为r,R,调用解密程序jmp mainloopjiamicall:call jiamijmp mainloopjiemicall:call jiemijmp mainloopover:mov dx,seg message3;提示结束mov ds,dxmov dx,offset message3mov ah,09hint 21hmov ax,4c00h ;程序退出int 21hmain endpcode endsend main3加密程序设计3.1 加密字符筛选程序3.1.1加密字符筛选程序描述本段程序用以筛选输入字符,将ASCII码在33到63之间的字符作为第一部分,ASCII码在64到126之间的字符作为第二部分,然后分别进行加密,两种加密方法完全不同。如果输入控制字符即ASCII码小于33或者为127的时候,程序提示输入错误,并从新读取键盘输入。3.1.2字符筛选程序流程图图2 字符筛选程序流程图3.1.3字符筛选部分程序代码分析字符筛选部分程序代码分析如下:jiami proc nearcall input_data ;提示输入lea di,buf ;取密码存储首地址jiami_loop:mov ah,01hint 21h ;从键盘读取一个字符cmp al,1bh ;判断是否为ESCje call_xianshi_jiami ; 到显示子程序cmp al,7fhje error_loop ;判断是否为deladd al,0cmp al,33 ; 判断是否输入控制字符js error_loopadd al,0; 清除sf 标志位cmp al,64;判断字符ASCII码是否小于64js call_table_jiami;调用查表加密jmp call_chengfa_jiami;调用第二部分加密error_loop:mov dx,seg message_error;输入错误mov ds,dxmov dx,offset message_error mov ah,09h int 21h;提示信息jmp jiami_loopcall_table_jiami:call table_loopjmp jiami_loopcall_chengfa_jiami:call second_jiamijmp jiami_loopcall_xianshi_jiami:call xianshi_jiamiretjiami endp3.2查表加密程序设计3.2.1查表加密描述将待加密字符ASCII码在33到63之间的字符称为第一部分,第一部分采用查表的方法加密,每个字符对应两个字节的密码,也就是两个字符,密码表如图2所示。进行加密的时候,只要将输入字符的ASCII码减去33,再以它作为密码表格的偏移量,就可以查到密码。如输入字符 % ,其ASCII码为37 ,37-33=4 ,表格中偏移为4的密码为7626h ,即 &v 为密码。在程序数据段中预先输入密码表,即建立一个31个字型数据的数组来存放密码,加密的时候,以偏移量来调用数组的元素,就是密码。没加密一个字符,将加密后的密码存入预先定义好的数组中,显示的时候先显示低字节,在显示高字节。表一 密码表原码密码原码密码原码密码原码密码337e22h41682ah495857h57507eh347c3eh426638h507d56h584e41h357a23h43642ch51596fh594c43h36783ch446236h523679h604a45h377626h45602eh535877h61484dh38743ah465834h545675h624667h397228h475630h555473h634440h407038h486032h565271h3.2.2查表加密汇编代码分析本程序段主要用到查表指令xlat,将表格的段地址放入ds,偏移地址放入dx,偏移量放入al中,查表后结果存放在al中。对代码的分析如下:table_loop proc nearmov dx,seg table2mov ds,dxmov bx,offset table2;取密码表首地址sub al,33add al,almov dl,al;暂存al(输入字符的ASCII码)xlat;查表mov cl,al;将密码低字节存入clmov al,dl;再取密码高字节存入chadd al,1xlatmov ch,almov dx,seg buf;取密码存储单元首地址mov ds,dx mov di,cx;将密码存入存储区得带加mov ax,0024h;密完成后显示mov di+2,alinc diinc direttable_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的倍数#(35)al-1是5的倍数%(37)al-3是偶数&(38)al+1是寄数 (39)al+3断是否为3的倍数,在判断是否为5的倍数,然后判断奇偶,这样就不会出现混淆出错的情况。3.3.2第二部分加密程序设计流程图第二部分加密程序流程图如图所示,先判断是否为3的倍数,再判断是否为5的倍数,然后判断奇偶。图3 加密程序流程图3.3.3第二部分加密程序设计代码分析程序代码如下,先判断al是否为3的倍数,再判断是否为5的倍数,然后判断奇偶性,顺序判断,满足则跳转调用子程序加密,保存数据。second_jiami proc nearmov dl,al;暂存almov ah,0mov bl,3div bl;al除以3add ah,0;判断余数是否为0jz call_div3_jiami;是0则跳转mov al,dlmov ah,0;清楚ah中的数mov bl,5div bl;al除以5add ah,0;判断余数是否为0jz call_div5_jiami;是0则跳转mov al,dltest al,01h;判断al的奇偶性jz call_oushu_jiami;偶数跳转call jishu_jiamijmp jiami_loopsj_ret:retcall_div3_jiami:call div3_jiamijmp sj_ret;返回call_div5_jiami:call div5_jiamijmp sj_retcall_oushu_jiami:call oushu_jiamijmp sj_retsecond_jiami endp如果al是3的倍数调用的子程序div3_jiami如下,在最后两个字节中存入了数据24h,是为了在显示的时候调用dos的字符串显示功能。div3_jiami proc nearmov bx,seg bufmov ds,bx;取存储区地址mov ah,35;符号#的ASCII码mov al,dl;待加密符号在上一程序中暂存过sub al,1;减1mov di,ax;将两个字节数据送存储区mov ax,0024hmov di+2,axinc diinc di;指向下一单元retdiv3_jiami endp3.4密码显示程序代码分析密码显示程序如下,先判断开始的2个字节是否为0024h,用来判断是否有密码以经保存,如果有密码已经保存了就显示所有密码再退出,否则退出。xianshi_jiami proc nearcall huanhang;显示换行mov dx,seg bufmov ds,dx;取密码存储区首地址lea di,bufmov ax,di;去第一个字型数据cmp al,0024h;判断是否存储了数据jz call_no_codecall huanhang;有数据,换行显示mov dx,seg codeismov ds,dxlea dx,codeis;显示提示信息mov ah,09h int 21hmov dx,seg buf;显示存储区信息mov ds,dxlea dx,bufmov ah,09hint 21hret_back:call huanhangcall huanhang;两次换行,提高视觉效果ret ;返回call_no_code:call no_codejmp ret_backxianshi_jiami endp4解密程序设计4.1解密程序设计描述解密是加密操作的反动作,只要依照加密的方法,一步步返回去,就可以将两个字节的密码变为加密钱的单字节字符。首先判断密码的高字节是否为35、37、38、39,若高字节是这些数中的一个,那么舍去高字节数据,分别将低字节的数加1、加3、减1、减3,就得到了原码。如果密码的高位不是上面的四个数之一,那么需要通过查表找到字型密码在密码表中的偏移量,在将偏移量加33就是密码。如果输入控制字符或者输入没有原码的两个字符时,程序将提示输入错误,要求重新输入密码。4.2解密程序流程图4.2.1解密字符筛选流程图解密程序流程图如图所示,如果输入的是Esc则退出,如果输入的是控制字符,则提示输入错误,提示重新输入。State是在数据段定义一个字节数据做全局变量,初始值设为0,用来指示输人字节的状态,当输入两个字节后调用函数jiemi_data,解密已存在bx中的一个字型数据。图4 解密字符筛选流程图4.2.2解密程序流程图解密程序流程图如下所示,先判断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 nearcmp bh,40;高位40第二部分解密call table_jiemi;否则查表解密jiemi_data_ret:ret ;返回call_second_jiemi:call second_jiemijmp jiemi_data_retjiemi_data endp;*查表解密子程序table_jiemi proc nearmov dx,seg table2mov ds,dx;取table2首地址lea si,table2mov cx,0031h;设置计数初值mov ax,bxscan_code:mov dx,si;取table元素cmp ax,dxjz find_code;比较、判断 inc siinc siloop scan_codecall rong_code;提示密码错误rret:ret;返回find_code:mov bl,30h;找到密码后计算计数变化sub bl,cladd bl,34;得到密码 mov dx,seg buf1mov ds,dxmov di,bl;保存到存储区mov al,24h;存储区以24h结尾mov di+1,alinc dijmp rrettable_jiemi endpsecond_jiemi proc near;第二部分解密程序开始mov dx,seg buf1mov ds,dxcmp bh,35;判断是否高位bh为35jz div3_jiemicmp bh,37;判断是否高位bh为37jz div5_jiemicmp bh,38;判断是否高位bh为38jz oushu_jiemicmp bh,39;判断是否高位bh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网版制版员专业技能考核试卷及答案
- 挖掘铲运和桩工机械司机岗位操作规程考核试卷及答案
- 2025年丙氧氨酚复方片行业研究报告及未来行业发展趋势预测
- 2025年儿童感冒用药行业研究报告及未来行业发展趋势预测
- 2025年电容式加速度计行业研究报告及未来行业发展趋势预测
- 2025年电子驻车制动器行业研究报告及未来行业发展趋势预测
- 碳五碳六异构化装置操作工技能比武考核试卷及答案
- 氧化铝焙烧工三级安全教育(车间级)考核试卷及答案
- 炼钢工5S管理考核试卷及答案
- 铁合金炉外法冶炼工技能操作考核试卷及答案
- 施工项目会议管理制度
- 声音的特性讲课件
- 教学勇气课件
- 2025福建省特安安全技术服务中心有限公司招聘9人笔试参考题库附带答案详解析集合
- T/CCS 075-2023煤矿柔性薄喷材料喷涂施工技术要求
- 医院感染诊断标准课件
- 2025城镇公寓买卖合同范本
- 黄褐斑患者护理课件
- 部队项目保密合同协议
- 《绩效管理实操》课件
- 中医调理男女生殖系统疾病的技巧
评论
0/150
提交评论