版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、xian 成都信息工程学院课程设计报告des加密解密的实现课程名称:应用密码算法程序设计 学生姓名: 学生学号: 2008122112 专业班级: 信息安全2008级3班 任课教师: 2010年 11 月 5 日附件:课程设计成绩评价表指导老师评阅成绩表学习与工作态度(30%)选题意义(10%)文献综述(10%)研究水平与设计能力(20%)课程设计说明说(论文)撰写质量(20%)设计创新(10%)总分指导老师签名: 年 月 日课程设计答辩记录及评价表学生讲述情况教师主要提问记录学生回答问题情况答辩评分评分项目分值评价参考标准评分总分优良中及格差选题意义1098764文献综述1098764研究水
2、平与设计能力201917151310课程设计说明书(论文)撰写质量201917151310设计创新1098764答辩效果302825221915答辩小组成员签名答辩小组组长签名: 年 月 日课程设计成绩评定表成绩汇总评分项目评分比例分数课程设计总分指导老师评分50%答辩小组评分50%目 录1 背景与意义32. 系统设计42.1系统主要目标42.2主要软件需求(运行环境)42.3功能模块与系统结构42.3.1 密钥模块42.3.2 加密模块52.3.3 解密模块53 系统功能程序设计53.1基本要求部分53.1.1 初始置换ip53.1.2 e盒扩展63.1.3 与密钥进行异或63.1.4 s盒
3、变换63.1.5 p置换运算73.1.6 与左32位进行异或73.1.7 逆ip置换83.1.8 des加密函数83.1.9 密钥交换93.1.10 decode()解密函数103.2较高要求部分113.2.1 分组加密实现113.2.2 明文分组最后分组的填充113.3程序界面预览124. 测试报告124.1 密钥中间过程124,2 加密过程中的各步结果134.3 解密过程中的各步结果135 结论14参考文献141 背景与意义 des是由美国ibm公司于20世纪70年代中期的密码算法发展而来的,在1977年1月15日,美国国家标准局正式公布实施,并得到了iso的认可。在过去近20年的时间里,
4、des被广泛应用于美国联邦和各种商业信息的安全保密工作中,经受信了各种密码分析和攻击,体现出了令人满意的字全性。但随着密码分析技术和计算能力的提高,1994年,美国决定不再使用des算法,目前des算法已被更为安全的加解密算法取代。虽然这样,但是目前还无法将des加密算法彻底破解掉,而且des算法的加解密算法非常快,仍是目前使用最为普遍的对称密码算法。在国内,随着三金工程尤其是金卡工程的启动,des算法在pos、atm、磁卡及智能卡、加汕站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡人的pin码加密伟输,ic卡与pos机之间的双向认证、金融交易数据包的mac校验等,均用
5、到des算法。2. 系统设计2.1系统主要目标基本要求部分:1能够对一个明文分组进行加密,加密后能够正确解密。2程序运行时可以输出任一组密钥。因为实现了对任意长度明加密,所以没输出每一轮加密后的结果。因为当明文长度过长时,每一轮加密结果会很多。3程序有良好的人机交互操作;较高要求部分:1如果明文不止一个分组,程序能完成分组,然后加密;最后一个分组长度不足时要求完成填充;2密钥采用ascii码,明文输入信息可以是文字(可以是汉字或英文,要求不止一个加密分组长度),任意字符。进行加密后,能够进行正确的解密;3. 程序代码有比较好的结构,模块划分合理,用类进行封装,通过调用类的成员函数实现加密解密功
6、能。2.2主要软件需求(运行环境)本软件用c#语言编写,编写时所用的工具主要是visual studio。编辑成功后的.exe文件可以在装有windows系统的任何计算机上使用。测试平台:windows xp professional使用软件:microsoft visual studio 20052.3功能模块与系统结构该软件由三个模块构成;2.3.1 密钥模块private void key(string str) /此函数用来获取密钥的数组str是密钥字符串,最后得到钥密二进制数组.用一个类成员数组key来存放。private void keybuild() /此函数用来构造16轮子密钥
7、private void keycreate(int midkey2,int movebit, int n)/此函数用来实现循环左移,同时进行pc2置换上面二个函数用来产生16轮密钥,最后存放在类成员二维数组keyarray中。private void showkey() /此函数用来显示密钥2.3.2 加密模块private void button2_click(object sender, eventargs e) /加密事件加密事件包含了arraydes()函数;private void arraydes() /此函数用来对明文分组加密arraydes()包含plainarray()、k
8、ey()、keybuild()、keycreate()、showkey()和des()函数,private void plainarray(string str) /此函数用来获取明文字符串的二进制数组。private void des(int, plain, int key, int n) /des加密函数2.3.3 解密模块private void button4_click(object sender, eventargs e) /解密事件private void exchange() /此函数用来交换16轮密钥,把第一轮作最后一轮private void arraydecode() /
9、此函数用来分组解密private void encodearray(string st) /此函数用来对16进制的密文转成二进制private void decode(ref int, plain,int key,int n) /解密函数3 系统功能程序设计3.1基本要求部分3.1.1 初始置换ip将ip盒分为左32位和右32位,将明文左32位和右32位分别进行ip置换,最后既实现了ip置换,同时还将明文分成了左32位和右32位,为下一步做好了准备。for (i = 0; i 32; i+) ldatai = encodeip1i - 1; rdatai = encodeip1i+32 - 1
10、;循环变量i用来找到ip盒中下标为i的数,ipi取出该数,由于计算机中下标是从零开始计算的,而ipi表的是明文二进制中第几个数,所以应置换成明文二进制中第ipi-1那个数。3.1.2 e盒扩展private void echange(ref int rdata, ref int rdatap) for (int i = 0; i 48; i+) rdatapi = rdataei - 1;rdata表示要传入的右32位二进制明文,rdatap表示经过e盒变化后的要传回的48位。道理和ip置换差不多。也是找到e盒中相应的数,然后减1找到rdata中相应的数,然后存到rdatap中。3.1.3 与
11、密钥进行异或for (i = 0; i 48; i+) rdatapi = rdatapi keyarrayk, i; keyarray数组中存放的是16伦密钥,k表示第几伦,是从0开始计数的。rdatap是从e盒中出来的48位二进,变化完后,依然存在rdatap数组中.3.1.4 s盒变换for (i = 0; i 48; i += 6) n =i/6; linex = (rdatapi 1) + rdatapi + 5; liney = (rdatapi + 1 3) + (rdatapi + 2 2) + (rdatapi + 3 1) + rdatapi + 4; fillbin(re
12、f rdata, n, sn, linex, liney); linex变量指s盒的第几行,liney变量指s盒的第几列.“rdatapi1”表示左移一位。先将rdatapi这个数转成二进制,再左移一位,并在最后加零。相当于乘以2。后面是同样的道理。n=i/6;表示第几个s盒。实例把101101代入:linex=(rdatap0=1)1)+(rdatap0+5=1)=”10”+”1”=2+1=3;同理可以算出liney=6;fillbin()参数rdata用来输出s盒变换后的32二进制,n第几个s盒,sn,linex,liney对应s盒中的相应数.下面是fillbin的具体代码:private
13、 void fillbin(ref int rdata, int n, int s) int temp = new int4; int i; for (i = 0; i 4; i+) /将s盒中的数转成四位二制数 tempi = s % 2; s = s / 2; for (i = 0; i 4; i+) /将每次的四位二进制数存32位rdata数组中 rdatan * 4 + i = temp3 - i; 3.1.5 p置换运算for (i = 0; i 32; i+) tempi = rdatai; 先将经过s盒代替的32位存入temp数组中,主要原因是这里输入的32位和输出的32位都是存
14、在rdata数组中,如果用不同的数组来存放可以不用进行这一步。 for (i = 0; i 32; i+) rdatai = temppi - 1; 3.1.6 与左32位进行异或for (i = 0; i 32; i+) rdatai = ldatairdatai;左322位与右32位异或后依然存放在rdata数组中,作为下一轮的右32位输入.3.1.7 逆ip置换private void ip2change(ref int ldata,ref int rdata,ref int encode) int temp = new int64; int i; for (i=0; i 32; i+)
15、 tempi = rdatai; tempi + 32 = ldatai; for (i = 0; i 64; i+) encode i = tempip2i - 1; 本来最后一轮不应该交换左32位与右32位,但之前我们同样将它们交换了,然后在ip逆置换中将它们再交换回来。这里的temp数组就是用实现它们的交换。然后再进行ip逆置换。3.1.8 des加密函数private void des(int, plain, int key, int n) int ldata = new int32, rdata = new int32, temp = new int32, rdatap = new
16、int48; int encode = new int64; int i; buildencode(ref ldata, ref rdata, ref encode, n); plaindata(ref ldata, ref rdata, ref encode); for (int k = 0; k 16; k+) for (i = 0; i 32; i+) tempi = rdatai; echange(ref rdata, ref rdatap); for (i = 0; i 48; i+) rdatapi = rdatapi keyarrayk, i; schange(ref rdata
17、p, ref rdata); pchange(ref rdata); for (i = 0; i 32; i+) rdatai = ldatairdatai; for (i = 0; i 32; i+) ldatai = tempi; ip2change(ref ldata, ref rdata, ref encode); for (i= 0; i 64; i+) strkeyi = encodei; buildencode(ref ldata, ref rdata, ref encode, n)函数所有明文二进制数组中选出64位,并将它们分成左32位和右32位,rdata存放右32位,lda
18、ta存放左32位,encode存放64位.n表示对文明进行分组加密中的第几组.plaindata(ref ldata, ref rdata, ref encode)进行ip置换for (i = 0; i 32; i+) tempi = rdatai;每一轮进行变化之前先将右32位存入temp数组中,作为下一轮的左32位输入。这个循环与下面一起实现该功能for (i = 0; i 32; i+) ldatai = tempi;3.1.9 密钥交换private void exchange() int, key1 = new int16,48; int i, j; for (i = 0; i 16
19、; i+) for (j=0;j48;j+) key1i,j=keyarray i,j; for (i = 0; i 16; i+) for (j = 0; j 48; j+) keyarray 15-i,j = key1i,j; 解密时先要将16轮密钥进行交换。3.1.10 decode()解密函数private void decode(ref int, plain,int key,int n) int ldata = new int32, rdata = new int32, temp = new int32, rdatap = new int48; int encode = new in
20、t64; int i; buildencode(ref ldata, ref rdata, ref encode, n); plaindata(ref ldata, ref rdata, ref encode); for (int k = 0; k 16; k+) for (i = 0; i 32; i+) tempi = rdatai; echange(ref rdata, ref rdatap); for (i = 0; i 48; i+) rdatapi = rdatapi keyarrayk, i; schange(ref rdatap, ref rdata); pchange(ref
21、 rdata); for (i = 0; i 32; i+) rdatai = ldatai rdatai; for (i = 0; i 32; i+) ldatai = tempi; ip2change(ref ldata, ref rdata, ref encode); for (i = 0; i 64; i+) strkeyi = encodei; 解密函数一开始也是进行ip置换,而不是进行ip逆置换,因为上一轮结束时的ip逆置换和解密开始的ip置换相乘够成单位矩阵。3.2较高要求部分1实现了对任意长度的明文都能加密。最后一个明文长度不足时在后面添加二进制零,补足64明文二进制。密钥部分通过设定密钥输入框的属性来限定密钥长度最长为8个字符,当不足8个字符时,弹出友好的提示框,提醒用户输入8个字符。2密钥用ascii码,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四年级数学下册 小数的大小比较
- 新海兰灰商品蛋鸡饲养管理手册
- 护理不良事件改进案例分析
- 快递安全员责任制度
- 意识形态目标责任制度
- 房地产销售责任制度
- 执业护士岗位责任制度
- 扶贫办岗位责任制度
- 技校工会责任制度
- 护士责任制管理制度
- 小学科学新教科版三年级下册全册教案(2026春新版)
- 2026年财政局遴选工作人员考试试题及答案解析
- 2026年三八妇女节:女性社会责任与时代担当
- 图书档案馆管理与服务指南
- 【新教材】2026年春季人教PEP版四年级下册英语全册教案(含教学计划)
- 2026年南通职业大学单招职业技能测试题库附答案详解(能力提升)
- 2026年九江职业大学单招职业技能考试题库含答案详解(突破训练)
- 第13课《短文两篇-不求甚解》课件(共30张)统编版语文九年级下册
- 中国农业银行官网登录//笔试历年典型考题及考点剖析附带答案详解
- 中国华电集团有限公司招聘笔试题库2026
- 教师自我反思能力培养的AI辅助模式创新与实践研究教学研究课题报告
评论
0/150
提交评论