DES加解密过程和实现

上传人:dja****22 文档编号:152318778 上传时间:2022-09-15 格式:DOC 页数:15 大小:163KB
收藏 版权申诉 举报 下载
DES加解密过程和实现_第1页
第1页 / 共15页
DES加解密过程和实现_第2页
第2页 / 共15页
DES加解密过程和实现_第3页
第3页 / 共15页
资源描述:

《DES加解密过程和实现》由会员分享,可在线阅读,更多相关《DES加解密过程和实现(15页珍藏版)》请在装配图网上搜索。

1、*本科生作业*兰州理工大学计算机与通信学院201年春季学期 信息安全 课程专 业: 物联网工程 姓 名: 学 号: 授课教师: 郭显 成 绩: DE加解密过程及其实现1 ES加解密原理DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国M公司研制的对称密码体制加密算法。明文按6位进行分组,密钥长64位,密钥事实上是6位参与DS运算(第8、6、24、3、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法.其入口参数有三个:key、dta、mod.ey为加密解密使用的密钥,dat为加密解密的数

2、据,mode为其工作模式.当模式为加密模式时,明文按照6位进行分组,形成明文组,ky用于对数据加密,当模式为解密模式时,key用于对数据解密。实际运用中,密钥只用到了4位中的56位,这样才具有高的安全性。1.1 DE算法总体描述及流程图DE是一个分组加密算法,它以4位为分组对数据加密。4位一组的明文从算法的一端输入,6位的密文从另一段输出。它是一个对称算法:加密和解密用的是同一个算法。密钥通常表示为64位的数,但每个第8位都用作奇偶校验,可以忽略,所以密钥长度为56位。密钥可以是任意的6位的数,且可在任意的时候改变。对于任意的加密方案,总有两个输入:明文和密钥。E的明文长为6位,密钥长为56位

3、.明文的处理一般经过三个阶段:首先,64位的明文经过初始置换(IP)而被重新排列。然后经历16轮相同函数的作用,每轮作用都有置换和代替。最后一轮迭代的输出有位,它是输入明文和密钥的函数。其左半部分和右半部分互换产生预输出。最后预输出再被与初始置换()互逆的置换产生6位的密文。ES算法只不过是加密的两个基本技术混乱和扩散的组合,即先代替后置换,它基于密钥作用于明文,这是一轮(round),DS在明文分组上实施1轮相同的组合技术。如下图所示:图1 ES算法总体描述DE使得用相同的函数来加密或解密每个分组成为可能,二者唯一的不同就是密钥的次序相反。1. E加解密算法原理 DS对4位明文分组进行操作。

4、通过一个初始置换,将明文分组分成左半部分和右半部分,各32位长。然后进行1轮完全相同的运算,这些运算被称为函数 f,在运算过程中数据与密钥结合。经过轮后,左、右半部分合在一起经过一个末置换(初始置换的逆置换),算法就完成了。在每一轮中,密钥位移位,然后再从密钥的6位中选出48位。通过一个扩展置换将数据的右半部分扩展成4位,并通过一个异或操作与48位密钥结合,通过8个S盒将这48位替代成新的32位数据,再将其置换一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果即成为新的左半部分。将该操作重复16次,便实现了DE的16轮运算。一轮DES如下图所示:图 DE

5、S算法一轮迭代的过程假设是第i次迭代的结果,i和Ri是i的左半部分和右半部分,K是第i轮的48位密钥,且f是实现代替、置换及密钥异或等运算的函数,那么每一轮就是:i=Ri-1=f(i1,i)2 程序代码incue iostram inclue fream usin namespac sd;const staic c ip = /初始置换 8, 50, 4, 34, 2, 18, 10, 2, 60,2, 4, 36, 28, 0,12, 4, 2, , 46,38, 3, 2, 1, 6, 6, 56, 48,40,32, 2, 16, 8, 57, 49,41, 33, 25, 1, 9,

6、1, 59,1, 43, 35,,19, 11, 3, 61,53, 45,37, 9, 2, 13, 5, 3, 55, 47, 3, 1, 3, 15, 7 ; cos taic char fp = /末置换 40, 8,4,1,6,2, 64, 3, 39, 7,47, , 5,3, 6,31, 38, 6, 46,14, 5, 2,62, 0, 37,5, 5, 1,53,2, 6, 29, 3, 4, 4, 12, 52, 20, 60, , 35,, 43, 1, 51, 1, , 2, 34, 2,42,10, 50, 18, 58, 2, 3, 41, ,4, 17, 57,

7、2 ;costsatiharsbo64 = /bx 1*/ , 4, 13, 1,, 5,1, 8, 3, 10, 6, 2, , 9,0, 7,0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 1, 11, 9,5, 3,8, 4, , , 8,13, 6, 2, 11, 1, 1, 9,7, , 1,5, 0, 5, 12, 8, 2,4, 9, , 7, 5, 1, 3, 14,10,6, 13, 2 * ,1, ,14, , 1, 3, , , 7, , 13, 1,0, 5,1,3, 1, , 7, 1, 2,8, 14, 12, 0, 1, 10, 6, 9, ,

8、5, 0,14,7, 11,10,4,13,1, 5, 8, 12,6, 9, ,2, 15, 1, 8, 0, , 3, 15, 4, 2, 1, 6, 7, 2, 0, 5, 14, 9, /* 3/ 10, 0,9, 4,6,3, 15,5,1, 1, 12, 7,1,4, 2, 8, 1,7, , 9, 3, , 6, 1,,8, 5, 14,, ,15, , 13, 6, ,9, 8, 15,3, , 11, , , ,5, 1, 4, 7, 1, 10,13, 0,6,9, 8, 7, 4, 5, 14, ,11, 2, 12, /S4 */ 7, 13,14, , ,6, 9,1

9、0, 1, , 8,5,1,12, 4, 15, 1, 8, 1,5, 6, 15,0,3, 4,7, 2, 12,, 0, 14, 9, 10, 6, 9,0, 12, 11, 7,13, 15, 1, 3, 4, 5,2, 8, , 3,5, , 1, 1, 13, 8, 9,4, 5, 11, 12, 7, , 4, /* 5*/ 2, 2, ,1, 7,0, 11, 6, , 5, 3, 15, 13, 0, 4, 9, 1, 1,2, 12, , 7, 13, 1, 5, 0, 5,10, 3, 9, 8, 6, , , 1, 11, 10, 13, 7, ,15, , 1, 5,

10、, , 0,1, 1, 8, 1, 7, 1, 14, 2, 3, 6, 5, 0, ,10, 4, 5, 3, /* S6 / 1, , 10, 15, 9, , 6, 8, 0,13, 3, 4,1, , ,11, , ,4, 2, 7, 2, 9,5,6, , 13, 14,0, 1, 3, 8, 9, 14, 1, 5, 2, 8,12, 3, 7, 0, ,10, 1, 1, 11,6, 4,3, 2, 2, 9, , 1, 10,1, 14, , , 6, 0, , 13, / 7 4, 11, 2, 14, 5, , , 3, 3,1, 9, , 5, 0, 6, , 13, 0

11、, 1, 7, , 9, 1,10,14, 3,5,12, 2, 15, , 6, 1, 4,1,13, 12, 3,7,4, 10, 1, 6, , 0, 5, 9, 2, 6,11, 13,8, 1, , 1, 7, 9, 5, , ,4, , 3, 2, /* 8 / 13, , 8, , 6, 15, 1, 1, 10, 9, 3,1, 5, 0, 12, 7, , 1, 13,, 10, , , , , , 6, 11, , , 9, 2, 7,11, 4, 1, 9, 12,14, , 0,,, 13, 1, , 5, , 2, , 4, 7, , 10, 8, 13, , 12,

12、 9, , 3, 5, 6, 1; cnst static chrrar = /压缩置换 14, 17, 11, 24, , 5, 3,2,15, 6, 2,10, , 9, 2,4, 2, , 16, , 7, 20, ,2, 41,52, 1, 7, 7, 55, 30, 40, 51, 45, , 48, 4, 49, 39, 56, 34, 53, 6, 42, 50, ,2, 3;cons sati char e /扩展置换 32, 1, 2, 3, 4,5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11,1, , 1,13, 14, 15, 16,17, 6, 1,

13、18, 1, 0, 2, 20, 1, 2,23, 24, 25, , 2, 26, 2, 28, 29, , 29, 3, 31, 32, ; cnststic ca zh /置换 6, 7, 0, 21, 9, 1,28, 1, 1, 15, 23, 26, 5, 18,1, 10, 2, 8, 1, 3, 3, 9, 19, 3, 30, 6, 2, 11, 4, 5 ;nst statcchar rar= 5,9, 41, 33, 25,7, 9, , 58, 50, 42, 34, 26, 18, , 2,9, 51, 43, 35, 27, ,11,3, 60, 52, 44, 6

14、, 63, 55, 7, 9,1, 3, ,7, 62, 5,6, 38, 0, 22, 14,6, , 45, 7, 29, 21, 13, 5, 28, 2, 2, 4;bolkey168=,/*rkey1648,/ char key_8; vd ByteTBi(ool Out,char*In,i it)/字节到位的转换 it i; or(i=;ibs;i+) uti=(Ini/8(i%))1; vidiTyte(chr *,b *I,int bit) /位到字节转换 for(it i=;ibits/8;i+) ui0; (i=0;bts;+) O/8=In(i8); 组合了位操作符和赋值

15、操作符的功能 voi Xo(bool *nA,nst bl *InB,iten) /按位异或 o(int i=0;ilen;i+) InAin; vod keyfc(charIn) 获取密钥函数 ini,j=0,mo,k; bool ke06,temp,eyi6;BteToBit(keyin,n,64); /字节到位的转换 r(i=0;i5;i+) /密钥压缩为56位 yi=keinKr; fo(=;1;+) /1轮密钥产生 if(i=0=|i=|i=15) mo=1; ese mov=2; for(k=;kmov;k+) /分左右两块循环左移 or(it m;m8;m+) tem=keym*

16、; for(j=m*7;j*7+7;+) eyk0j+1; e0m*76=tep; temp=ky0; for(m=0;m27;m+) key0=key0m; ey07=temp; tmp=key02; for(m=28;m5;m+) keym=keym+1; key05=emp; or(j0;j8;j+) /压缩置换并储存 kij=ke0arj-; vo DES(char Out,char In,bol MS)/加密核心程序,ms0时加密,反之解密 bol MW64,tmp2,PMW4; bool kzw8,keytm4,s2; int ,lie; ByeToit(PMW,I,4); fr(

17、int j0;j64;j+) MWjPWij-1; /初始置换 bol*i=W0,i=&MW3; for(int =0;i4;i+) /右明文扩展置换 kzm=Rii1; if(S=0) /DES加密过程 or(n ln=;lu16;u+) fr(=;i32;i+) ssi=i; for(i0;i48;i+) /右明文扩展置换 mwiReii-1; 注意指针 for(=0;i8;i+) eytemi=keluni; /轮密钥 Xor(kzw,keytem,48);/*S盒置换* for(i=0;i8;i+) hang=zmwi62wi*6+5; i kzmwi*61+kzmwi+2*+kzmi

18、*632+kzmwi*6+4; tmpi+3=sboxi(han)16+lie2; i*+2(sbi(hang+1)16+lie2)2; tp+1=(sboxi(han+)*+li4)%2; tmpi*(si(hg1)16+li/)%; for(int =0;i;i+) /P置换 Ri=tmpPzhi1; Xor(Ri,L,32); /异或 for(i=0;i3;i+) /交换左右明文 ii=s; fr(=0;i32;i+) tmpi=Lii; Lii=Ri; Ri=tmpi; for(i;i64;+) MWi=MWf-1; toByte(ut,PM,64); /位到字节的转换 se /D解密

19、过程 fr(inln=5;lun0;lun) for(=0;i32;+) ssi=Ri; for(ini=;i;i+) /右明文扩展置换 zmwi=Rie1; /注意指针 for(i=;i48;+) keytemi=kui; /轮密钥 Xo(zw,keyte,8); S盒置换/ for(i0;i8;i+) hang=zmi*2+kmw6+; lie=kmwi*68+kzwi*6+*4+kzmwi6+3*2+kzmwi*6+4; tpi4+=bo(hng+1)16+lie2; tmpi4+2=(sbxi(hang+1)16lie2)2; pi4+=(sboxi(hng+1)*16le)%2; t

20、p=(box(an+)*16+lie/); for(i0;32;i+) /P置换 Rii=tmpPzhi; Xor(R,Li,2); /异或 or(=;3;+) /交换左右明文 Li=ss; or(i=0;i32;i+) mpLii; LiRii; Ritmi; fr(i=0;i64;+) MWiMfp-1; BitToBye(Out,PW,4); /位到字节的转换 voidma() har Ki,jm,final; nt i0; coutKii0; key(Ki); cout请输入明文(8字节):endl; or(i00;08;0+) cinjmi0; DES(final,jm,0); co

21、t加密后:”endl;/加密 for(i0=0;i0;i0+) coufinl; coted; cou解密后:endl; DE(jm,inal,1); /解密 f(=0;08;0+)coujm; utnd; 2.1 初始置换初始置换在第一轮运算之前进行,对输入分组实施如下表所示的变换.初始置换把明文的第58位换到第1位的位置,把第5位换到第2位的位置,把第42位换到第3位的位置,依此类推.58,50, 42, 3, 6, 8, 10, 2, 60, 52, 44, 6,28, 0, 12,462, 54, 4,38, 30,22, 1, 6,64,56, 48, 40, 32, 4,6,857

22、, 4,41, 33, 25, 17, 9,, 59, 51,4, 3, 7, 19, 11, 361, 5,45, 37,29, 1, 13, 5,63, 55, 47, 39, 31,2, 1,7初始置换和对应的末置换并不影响DE的安全性,它们的主要目的是为了更容易地将明文和密文数据以字节大小放入DES芯片中。2密钥置换图3密钥置换过程由于不考虑每个字节的第8位,DE的密钥由64位减至5位,每个字节第8位作为奇偶校验以确保密钥不发生错误.如下表所示:57,9, 1, , 25, 17, 9,1, 5, 0,42,, 26,10,2, 9, , 3, , , 19, 1, 3,6, 2, 4

23、, 63, 5, 4,3, 3, 23, 7, 62, 54,46,8, 0, 21, 6, 6,5, 45, 7, 29, 21, 13, , 28,20, 1, 在ES的每一轮中,从5位密钥产生出不同的4位子密钥(suky),这些子密钥是这样确定的:首先,6位密钥被分成两部分,每部分8位。然后,根据轮数,这两部分分别循环左移1位或2位。每轮移动的位数如下表:轮 1 3 6 7 10 111 14 15 16位数1 1 22 2 1 2 2 2 22 2 1移动后,就从56位中选出48位。这个运算既置换了每位的顺序,也选择了子密钥,被称为压缩置换(omrsio emutation)。下表即定

24、义了压缩置换:14, 17, 11, 24, 1, 5, 3, 8,5, , 1, 12, 19,2, 4,26, , 16, , 27, 20, 1, 241, 52, , 37, 47,55, , ,, 45,3, 444, 4, 39,56, 34, 3, 46,42, 0,6, 29,可以看出,第33位的那一位在输出时移到了第5位,而处于第18位的那一位被忽略了.2.3扩展置换这个运算将数据的右半部分从32位扩展到48位。这个操作两方面的目的:它产生了与密钥同长度的数据以进行异或运算;它提供了更长的结果,使得在替代运算中能进行压缩。对每个位输入分组,第位和第4位分别表示输出分组中的两位

25、,而第2位和第3位分别表示输出分组中的一位,下表给出了哪一输出位对应哪一输入位:32, 1, 2, 3, 4,5, 4, , 7, 8,9, 9, 0, 1, 1, 1,1, 3, 14, 5, 16, 116,1,18, 1, 20, 21, 20, 21, 22, 23, 4,52, 2, 26, 2,8, 29, 8, 29,30, 31, 32, 1处于输入分组中第3位的位置移到了输出分组中的第4位,而输入分组的第21位则移到了输出分组的第位和第32位。尽管输出分组大于输入分组,但每一个输入分组产生唯一的输出分组。24 S盒代替图4 扩展、s盒选择代替压缩后的密钥与扩展分组异或以后,将

26、48位的结果送入,进行代替运算。替代由8个S盒完成,每一个盒都由位输入,4位输出,且这个S盒是不同的.48 位的输入被分为8个6位的分组,每一个分组对应一个S盒代替操作:分组1由盒操作,分组2由S盒2操作,等等。如下图所示:每一个盒是一个4行、1列的表。盒中的每一项都是一个4位的数。S盒的6个位输入确定了其对应的输出在哪一行哪一列。下表列出所有个S盒:S盒:14, 4, 3,1,2, 1,1, 8, 3, 10, , 1, 5, ,0, 70, 1, 7, 4,1, 2, 13, 1, , 6, 1, 11, 9, 5, 3,84, 1,, 8,13, 6, 2, 11, 5, 12,9,7,

27、 ,10,5, 015, 1, 8, 2, 4, 9,1, 7,5, 11, ,14,10, 0, 6, 1S盒2:5, 1,8, 4, 6,11, 3, 4, 9, , 2,13,12, 0, ,13, 13, , 7, 15, 2, 8,1, 12, 0, 1, 10, 6, 9,1, 50, 1, 7,11, 10, 4, 13, ,5, 8, 2, 6, 9, 3, 2,513, , 10,1,3, 5, 4, 2, 11,6,12, 0, 5,14,S盒:1, 0,9, 14, 6, 3, 15, 5, ,13, 1, 7, 11, 4,813, 7, 0, 9, 3, 4, 6,

28、0, 2, , 5, 14, 2, 11,15, 11,6,4,9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 1, 10,3, 0, , 9,7, 4, 1, 14, , ,5,2,2S盒4:7, 13, 1, , , 6, 9, 1, 2,8, ,1, 2, 4, 1513, , 1, , 6, 1, 0,3, 4,7, 2, 2, 1, 0,14, 910, 6,,0, ,1, 7, 13, 15, 1, 3, , , , 8,3, 15, 0,6, 1,1, 1, 8, 9, ,5, 11, 2, , 2, 14S盒5:2,12, , 1, 7, ,

29、1, ,8,5, 3, 5, 13,0,1,914,11, 2, 12, , 1,1,5, 0,15,1, , 9, , 64,, , 1,10,, 7, 8, 15, ,1,,6,, 0, 141, 8,12, 7, 1,14,2, 13,6, 5, , 9, 0, ,5,3盒6:12,1, 1,15, 2, 6, 8, , 1, 3, 4, 1, 7, 5, 10, 15,4, 2, 7, 12, 9, , 6, 1,1,14,0, 11,, 89,14, 1, 5, 2, 8, 1, , 7, 0,4, 10, 1, 1, 11, , 3, 2,12, 9, 5, 1,10, 11, 1

30、, 1, , 6, 0, 8, 1S盒7:4, 1, 2, 1, 5, , 8, 13, 3,12, 9, 7, 5, 10, 6, 11, 0, 11, 7, 1, 10, 14,3, 5, 2, 2, 5, 8, 61, 4, 11, 13,12, 3, 7, 14, 15, 6,8, , 5, 6, 1, 13,8, 1, , ,7, 9, 5,0,15, 14, 2, 3, 1S盒:13, 2,8, 4, 6, 15, 11, , 10, 9,3, 4,5, 0, 12,1, 15, 13, 8,10, , 7, 4, , 5, 6, 11, ,14, 9,7,11,4, 1, 9,

31、12, 14,0, 6,10,, 15, 3, 5,82,1, 1,7, ,1, 8,13, 15, 12,9, 0, 3,5, , 1假定将S盒的6位的输入标记位b1、b2、b3、b、b、b6。则b和b6组合构成了一个2位数,从0到,它对应着表的一行。从b2到b构成了一个位数,从0到1,对应着表中的一列。例如,假设第6个S盒的输入为11011,第1位和第位组合形成了11,对应着第6个盒的第三行,中间4位组合形成了1001,它对应着同一个盒的第9列,S盒6在第三行第9列的数是14,则用值111来代替101.这是DES算法的关键步骤,所有其他的运算都是线性的,易于分析,而S盒是非线性的,它比DE

32、S的其他任何一步提供了更好的安全性。这个代替过程的结果是8个4位的分组,他们重新合在一起形成了一个32位的分组。2。P盒置换S盒代替运算的32位输出依照P盒进行置换.该置换把每输入位映射到输出位,任一位不能被映射两次,也不能被略去,下表给出了每位移至的位置:16, 7, 20, 21,29, 1, 28, 17, 1,15, 23,26, 5,18, 1, 0 2,8, 2, 14,32, , 3, ,19, 3, 0, 6, 2, 1, 4, 25第位移到了第4位,同时第4位移到了第31位。最后,将盒置换的结果与最初的位分组的左半部分异或,然后左、右半部分交换,接着开始另一轮。2.6 末置换

33、末置换是初始置换的逆过程。DES在最后一轮后,左半部分和右半部分并未交换,而是将两部分并在一起形成一个分组作为末置换的输入,该置换如下表如示:0, 8, 8, 1,56, 24, 64, 2,39, 7,4, 15, 5,23,63, 18,6,6, 14, 54, 22, 62, 3, 37, 5, 45,13, 5, , 61, 296, 4,44, 12, 5, 20, 60,28, 35, 3, 4, 11, 5, 19, 59, 2734,2, 42, 10, ,18,58, 33, 1, 41,9, 1, 5,53 程序测试输入6位明文和64位密钥后得到4位密文,DES这种密码希望采用4位的密钥,然而仅仅采用位,其余八位可用作奇偶校验或随意设置.通过对比输入的明文及解密结果可知,c程序设计合理。文中如有不足,请您指教!15 / 15

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!