网站大量收购闲置独家精品文档,联系QQ:2885784924

DES课程设计报告.doc

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
院 院 学告 学术报 大技计 南学设 海科程 息课 亠=口 DES算法加密与解密的设计与实现 课程名称:应用密码学 学生姓名: 学生学号: 专业班级: 任课教师:吴汉伟 2013年 06月05 日 目录 一,DES 简介 2 二,DES加密原理 2 三,DES解密原理 错误!未定义书签。 四,DES模块分析 错误!未定义书签。 DES轮密钥生成 错误!未定义书签。 1」轮密钥生成流程图 错误!未定义书签。 TOC \o 1-5 \h \z 1.2置换选择1 4 1.3循环左移 5 1.4置换选择2 6 初始置换 6 拓展置换E 6 异或函数一 7 选择压缩变换S盒代替 7 置换运算P 错误!未定义书签。 异或函数二 错误!未定义书签。 逆初始置换 错误!未定义书签。 五,程序分模块实现 11 1,明文输入 11 子密钥产生 12 十六轮加密的实现 错误!未定义书签。 密文输出 错误!未定义书签。 5解密的实现 错误!未定义书签。 六,DES算法的安全性 错误!未定义书签。 七,DES的应用 错误!未定义书签。 八,课程报告总结 错误!未定义书签。 九,附录 14 一,DES简介 DES是Data Encryption Standard (数据加密标准)的缩写。它是由IBM公 司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使 用的数据加密标准,二十年来,它一直活跃在国际保密通信的舞台上,扮演了十 分重要的角色[10] 0 DES是一个分组加密算法,它以64位为分组对数据加密。同时DES也是一个 对称算法:加密和解密用的是同一个算法。它的密匙长度是56位(因为每个第 8位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变。 其中有极少量的数被认为是弱密匙,但是很容易避开他们。所以保密性依赖于密 钥。 二,DES加密原理: DES对64(bit)位的明文分组M进行操作,M经过一个初始置换IP置换成mO, 将明文分成左半部分和右半部分mO=(LO, R0),各32位长。然后进行16轮完 全相同的运算,这些运算被称为函数f,在运算过程中数据与密匙结合。经过16 轮后,左,右半部分合在一起经过一个末置换,这样就完成了 [12]。 在每一轮中,密匙位移位,然后再从密匙的56位中选出48位。通过一个扩 展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数 据,在将其置换换一次。这四步运算构成了函数f。然后,通过另一个异或运算, 函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为 新的左半部分。将该操作重复16次,就实现了。 K,l K,l K,a K KH IK) IK) 三,DES解密原理 在经过所有的代替、置换、异或盒循环之后,你也许认为解密算法与加密算 法完全不同。恰恰相反,经过精心选择的各种操作,获得了一个非常有用的性质: 加密和解密使用相同的算法。 DES加密和解密唯一的不同是密匙的次序相反。如果各轮加密密匙分别是 KI, K2, K3….K16那么解密密匙就是K16, K15, K14…K1。 四,模块分析 DES轮密钥的生成 1.1轮密钥牛成流程图如下图所示: 64位密钥Co (28 位)D. 64位密钥 Co (28 位) D. 28 位) 循环左移| 第环左移| * Cx ( 28 位) 6 (28 位) 1 1 ■ ■ ■ : (56 位 術环左移1 第环左移1 Ct ( 28 位) Dj (28 ft ) 1 1 置换迭轻1 | (56位 循环左移: 1 1 9 1 ■ 1 10 2 3 11 9 4 12 2 5 13 2 6 14 2 7 r 15 2 8 16 1 密V!表的I I気逻辑 严址换选择2 |■木t) (48 (?) 1.2置换选择1 将输入的64位密钥根据PC_1表进行置换。 int Transform_l(char key [64],char temp[56J) { int i; int PC_ 1 [56]={56,48,40,32,24,16,8,0, 57,49,41,33,25,17, 1,58,50,42,34,26,1 10,2, 59,51,43,35, 62,54,46,330,22,14,6,61,53,45,37,29,21, 13, 5,60,52,44,36,28,20,12,4, 27,19,11,3}; for(i=0;i56;i++) temp[i]=key[PC_l[i]]; return 0;} 1.3循环左移 经置换选择1变换后输出的56位密钥被分成两个28位的值C()和D0o每个循环中Cm 和Dm分别经过循环左移,这些经过移位的值再作为下一循环的输入。根据循环左移

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档