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

加密解密算法C实现.doc

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络与信息安全 Introduction to Network and Security ——DES 加密解密算法的C++实现 2011年10月 目录 一、DES算法的概述 3 1、DES简介 3 2、DES算法原理 3 3、DES算法简述 4 3.1算法过程的具体分析 5 3.2 具体示例分析 8 二、DES算法的C++实现 9 1、运行环境 9 2、功能说明 9 3、程序函数说明 9 4、程序运行效果图 20 三、小结 22 一、DES算法的概述 1、DES简介 DES是Data Encryption Standard(数据加密标准)的缩写。DES算法DES是一个分组, 图2-1 DES算法的第i轮过程 3、DES算法简述 DES算法处理的数据对象是一组64比特的明文串。设该明文串为m=m1m2…m64 (mi=0或1)。明文串经过64比特的密钥K来加密,最后生成长度为64比特的密文E。其加密算法过程如图3-1所示下: 图3-1算法加密流程图 3.1算法过程的具体分析 ①IP置换 对DES算法加密过程图示的说明如下:待加密的64比特明文串m,经过IP置换后,得到的比特串的下标列表如表3-1下: 该比特串被分为32位的L和32位的R两部分。R子密钥K1(子密钥的生成将在后面讲)经过变换f(R,K1)(f变换将在下面讲)输出32位的比特串f1,f1与L做不进位的二进制加法运算。运算规则为: f1与L做不进位的二进制加法运算后的结果赋给R1,R则原封不动的赋给L1。L1与R又做与以上完全相同的运算,生成L2,R2…… 一共经过16次运算。最后生成R16和L16。其中R16为L15与f(R15,K16)做不进位二进制加法运算的结果,L16是R15的直接赋值。 R16与L16合并成64位的比特串。值得注意的是R16一定要排在L16前面。R16与L16合并后成的比特串,经过置换IP-1后所得比特串的下标列表如下: 经过置换IP-1后生成的比特串就是密文变换f(Ri-1,Ki) 它的功能是将32比特的输入再转化为32比特的输出。其过程如图所示: 对f变换说明如下:输入Ri-1(32比特)经过变换E后,膨胀为48比特。膨胀后的比特串的下标列表如下: 膨胀后的比特串分为8组,每组6比特。各组经过各自的S盒后,又变为4比特(具体过程见后),合并后又成为32比特。该32比特经过P变换后,其下标列表如下: 经过P变换后输出的比特串才是32比特的f (Ri-1,Ki)。 在其输入b1,b2,b3,b4,b5,b6中,计算出x=b1*2+b6, y=b5+b4*2+b3*4+b2*8,再从Si表中查出x 行,y 列的值Sxy。将Sxy化为二进制,即得Si盒的输出。(S表如图3-4所示) ④子密钥的生成 64比特的密钥生成16个48比特的子密钥。子密钥生成过程具体解释如下: 64比特的密钥K,经过PC-1后,生成56比特的串。其下标如表3-5所示: 该比特串分为长度相等的比特串C0和D0。然后C0和D0分别循环左移1位,得到C1和D1。C1和D1合并起来生成C1D1。C1D1经过PC-2变换后即生成48比特的K1。K1的下标列表3-6为: C1、D1分别循环左移LS2位,再合并,经过PC-2,生成子密钥K2……依次类推直至生成子密钥K16。 注意:Lsi (I =1,2,….16)的数值是不同的。具体见下表: 3.2 具体示例分析 假设64位明文为X=3570e2f1ba4682c7,密钥K=581fbc94d3a452ea,包括8个奇偶校验位,前2轮的密钥分别是K1=27a169e58dda和K2=da91ddd76748。 出于演示的目的,这里的DES加密限制为仅仅使用的前两轮情况。使用表3-4IP将明文X划分为两个分组(Lo,Ro),这样,Lo=ae1ba189和Ro=dc1f104。 32位的Ro被扩展为48位E(Ro),这样,E(Ro)=6f80fe8a17a9。 通过E(Ro)与第一轮的密钥K1进行XOR运算,得到密钥依赖函数f1,这样:f1=E(Ro) K1=4821976f9a73 这个48位的f1首先被划分为8个6位分组,之后供给8个Si盒。从S盒替换阶段得到计算输出结果为Ω1=a1ec961c。 利用表3-5,Ω1的置换位置为P(Ω1)=2吧536c。将P(Ω1)与Lo作模2加,得到:R1=P(Ω1) Lo=85baf2e5 由此L1=Ro,因此L1=dc1f10f4。 现在考虑第二轮加密。借助表3-3扩展到R1,得到E(R1)=c0bdf57a570b。将E(R1)与K2做XOR运算,得到: f2=E(R1) K2=1a2c2

文档评论(0)

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

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

1亿VIP精品文档

相关文档