欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    课程设计(论文)DES加密解密的实现 .doc

    • 资源ID:3993339       资源大小:131.50KB        全文页数:15页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计(论文)DES加密解密的实现 .doc

    Xian 成都信息工程学院课程设计报告DES加密解密的实现课程名称:应用密码算法程序设计 学生姓名: 学生学号: 2008122112 专业班级: 信息安全2008级3班 任课教师: 2010年 11 月 5 日附件:课程设计成绩评价表指导老师评阅成绩表学习与工作态度(30%)选题意义(10%)文献综述(10%)研究水平与设计能力(20%)课程设计说明说(论文)撰写质量(20%)设计创新(10%)总分指导老师签名: 年 月 日课程设计答辩记录及评价表学生讲述情况教师主要提问记录学生回答问题情况答辩评分评分项目分值评价参考标准评分总分优良中及格差选题意义1098764文献综述1098764研究水平与设计能力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盒变换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年的时间里,DES被广泛应用于美国联邦和各种商业信息的安全保密工作中,经受信了各种密码分析和攻击,体现出了令人满意的字全性。但随着密码分析技术和计算能力的提高,1994年,美国决定不再使用DES算法,目前DES算法已被更为安全的加解密算法取代。虽然这样,但是目前还无法将DES加密算法彻底破解掉,而且DES算法的加解密算法非常快,仍是目前使用最为普遍的对称密码算法。在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡、加汕站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡人的PIN码加密伟输,IC卡与POS机之间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。2. 系统设计2.1系统主要目标基本要求部分:1能够对一个明文分组进行加密,加密后能够正确解密。2程序运行时可以输出任一组密钥。因为实现了对任意长度明加密,所以没输出每一轮加密后的结果。因为当明文长度过长时,每一轮加密结果会很多。3程序有良好的人机交互操作;较高要求部分:1如果明文不止一个分组,程序能完成分组,然后加密;最后一个分组长度不足时要求完成填充;2密钥采用ASCII码,明文输入信息可以是文字(可以是汉字或英文,要求不止一个加密分组长度),任意字符。进行加密后,能够进行正确的解密;3. 程序代码有比较好的结构,模块划分合理,用类进行封装,通过调用类的成员函数实现加密解密功能。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轮子密钥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()、Key()、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() /此函数用来分组解密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;循环变量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 与密钥进行异或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(ref rData, n, Sn, linex, liney); Linex变量指S盒的第几行,liney变量指S盒的第几列.“rDataPi<<1”表示左移一位。先将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 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位都是存在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+) 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 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 rDataP, 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位,lData存放左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; i+) for (j=0;j<48;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 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 rDataP, ref rData); PChange(ref 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码,即一个字符用8位二进制数表示。明文可以是任意字符(汉字和英文),明文一个字符用16位二进制数表示。3程序代码有比较好的结构,模块划分合理,所有功能都用类成员函数实现,整个软件用一个类实现。4界面友好,各种输入输出方便。3.2.1 分组加密实现对明文用电码本模式进行分组加密,每一个字符16位二进制,4个字符一个明文分组。相同的明文分组,将得到相同的十六进制字符。3.2.2 明文分组最后分组的填充在明文字符串转二进制时,就在一个大数组后面加零,最后计算加密轮数时分二种情况,一种情况是刚好最后一个分组明文就完了,另外一种情况是最后一个分组不足时,加密轮数为:明文字符串长度/4+1。实现代码如下:if (richTextBox1.TextLength % 4!= 0) for (int n = 0; n < 4 * (richTextBox1.TextLength / 4 + 1); n = n + 4) Des(a, key, n); ShowCiphertext(); else for (int n = 0; n < richTextBox1.TextLength; n = n + 4) Des(a, key, n); ShowCiphertext(); 3.3程序界面预览每一轮子密钥密文或明文字符串密钥字符明文字符串单击清空时,光标聚焦在明文输入处,同时清空所有框类的信息。单击加密事件时,先判断是否有明文存,不存在则提醒用户。然后进行密钥判断,如果密钥存在则进行加密,不存在则提醒用户。其中密文显示框和密钥显示框用户是不能操作的。单击 时用密文字符代替明文字符框中的明文,同时将密文字符框中的清空。同样单击解密时也要对各框有无内容进行判断。单击演示时会自动在明文框和密钥框中加入字符。4. 测试报告测试明文用为:成都信息工程学院.测试密钥为:123456784.1 密钥中间过程被始密钥的64位:001100010011001000110011001101000011010100110110001101110011100016轮子密钥:第0轮子密钥010100000010110010101100010101110000101011000010第1轮子密钥010100001010110010100100010100001010001101000110第2轮子密钥110100001010110000100110111101001000010010001100第3轮子密钥111000001010011000100110010010000011011011001011第4轮子密钥111000001001011000100110001111101111000000101001第5轮子密钥111000001001001001110010001000100101110101100010第6轮子密钥101001001101001001110010100011001010100100110010第7轮子密钥101001100101001101010010111001010100111001010000第8轮子密钥001001100101001101010011110000111001101001000000第9轮子密钥001011110101000101010001110100001000011100111100第10轮子密钥000011110100000111011001000110010001111010001100第11轮子密钥000111110100000110011001010110000111000010110001第12轮子密钥000111110000100110001001001000110110100000101101第13轮子密钥000110110010100010001101101000100011100110010010第14轮子密钥000110010010110010001100101001010000001100110111第15轮子密钥0101000100101100100011001010011101000011010000004,2 加密过程中的各步结果第一个明文分组:0110001000010000100100001111110101001111111000010110000001101111 E盒变化后的48位:100101011001011101010011110011110001010010100010 S盒出来的32位:01011001011111101011101011100111 P盒变换后的32位:00110101011110111101110011100111IP逆置换:1100101001100110111010011011100011110100000111000000000101101110经过黑盒测试这些函数,各个步变换都能按要求输出。 4.3 解密过程中的各步结果密钥还是加密时的密钥,得到16轮子密后,将顺序全部颠倒一下。因为解密过程与加密过相返。密文第一个分组:1100101001100110111010011011100011110100000111000000000101101110 E盒出来的48位:100011111011110011111101010101011011110000000110S盒出来的32位:11100011110110010000101000110100P盒出来32位:110101101010000111000111011000005 结论通过做这处软件,我学到了很多东西,首先是更加了解DES算法了,和如何用编程语言去实现各个步骤,例如S盒变变,以前只知道怎么做题,现在可以去实现S变化了。其次是又将以前的C、C*、C#几门语言熟悉了一遍,并且将以前书本上的一些技术自已去用了。最后是我学到了几种不同的方法去实现同一个问题,这也是我认为学习到最重要的地方。比如以前将一个字符转二进制都是先对2求余,再除以2。而我学到另一种方法,比如一个十六进制数如何转成四位二制:yi=(xi>>2>>(i&4)&1;因为在做这个软件的时候看了很多别人的代码,所以学到了不少东西,我看到了有人将什么E盒变换、S盒变换、IP置换、P变换等用一个函数就实现了。再看我代码,我就感觉我的代码重用率很差。还有一些编程方面的习惯也不太好。通过此次实践我发现很多不足,以后还要去弥补这些不足。参考文献1 谭浩强C程序设计(第二版) 清华大学出版社19992杨波现代密码学清华大学出版社20033 郑 莉 C+语言程序设计(第三版) 20044 杨晓光 Visual C#.NET程序设计(修订本) 2006

    注意事项

    本文(课程设计(论文)DES加密解密的实现 .doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开