- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)