版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、*本科生作业*兰州理工大学计算机与通信学院2017年春季学期信息安全课程专业:物联网工程姓名:学号:授课教师:郭显成绩:DE劭口解密过程及其实现1 DES加解密原理DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国旧M公司研制的对称密码体制加密算法。明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。其入口参数有三个:key、data、modkey为加密解密使用的密钥,data为加密解密的数据,
2、mode为其工作模式。当模式为加密模式时,明文按照64位进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性。1.1 DES算法总体描述及流程图DES是一个分组加密算法,它以64位为分组对数据加密。64位一组的明文从算法的一端输入,64位的密文从另一段输出。它是一个对称算法:加密和解密用的是同一个算法。密钥通常表示为64位的数,但每个第8位都用作奇偶校验,可以忽略,所以密钥长度为56位。密钥可以是任意的56位的数,且可在任意的时候改变。对于任意的加密方案,总有两个输入:明文和密钥。DES的明文长为6
3、4位,密钥长为56位。明文的处理一般经过三个阶段:首先,64位的明文经过初始置换(IP)而被重新排列。然后经历16轮相同函数的作用,每轮作用都有置换和代替。最后一轮迭代的输出有64位,它是输入明文和密钥的函数。其左半部分和右半部分互换产生预输出。最后预输出再被与初始置换(IP)互逆的置换产生64位的密文。DES算法只不过是加密的两个基本技术一一混乱和扩散的组合,即先代替后置换,它基于密钥作用于明文,这是一轮(round),DES在明文分组上实施16轮相同的组合技术。如下图所示:5型阴文您胡64btl密文图1DES算法总体描述二者唯一的不同就是密钥的次DES使得用相同的函数来加密或解密每个分组成
4、为可能,序相反。1.2 DES加解密算法原理DES对64位明文分组进行操作。通过一个初始置换,将明文分组分成左半部分和右半部分,各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密钥结合。经过16轮后,左、右半部分合在一起经过一个末置换(初始置换的逆置换),算法就完成了。在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作与48位密钥结合,通过8个S盒将这48位替代成新的32位数据,再将其置换一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果即成为新的左
5、半部分。将该操作重复16次,便实现了DES的16轮运算。一轮DES如下图所示:图2DES算法一轮迭代的过程假设Bi是第i次迭代的结果,Li和Ri是Bi的左半部分和右半部分,Ki是第i轮的48位密钥,且f是实现代替、置换及密钥异或等运算的函数,那么每一轮就是:Li=R-1R=Li-1f(Ri-1,Ki)2程序代码#include#includeusingnamespacestd;conststaticcharip=58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
6、57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7;/初始置换conststaticcharfp=40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25;con
7、ststaticcharsbox864=/*si*/14, 4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,/*S2*/15, 1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,
8、13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,/*S3*/10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,/*S4*/末置换/s_box7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,1
9、1,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,/*S5*/2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11, 8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,/*S6*/12, 1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10, 15,4,2,7,12,9,5,6,1,13,14,0,1
10、1,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,/*S7*/4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,/*S8*/13, 2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1, 15,13,8,10,3
11、,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2, 1,14,7,4,10,8,13,15,12,9,0,3,5,6,11;/压缩置换conststaticcharrar=14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32;conststaticcharei=32,1,2,3,4,5,4,5,6,7,
12、8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,/扩展置换24,25,26,27,28,29,28,29,30,31,32,1);/P置换conststaticcharPzh=16, 7,20,21,29,12,28,17,1, 15,23,26,5,18,31,10,2, 8,24,14,32,27,3,9,19,13,30,6,22,11,4,25);conststaticcharKeyrar=57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,5
13、1,43,35,27,9,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4;boolkey1648=0,/*rekey1648,*/charkey_in8;voidByteToBit(bool*Out,char*In,intbits)inti;for(i=0;i(i%8)&1;voidBitToByte(char*Out,bool*In,intbits)for(inti=0;ibits/8;i+)Outi=0;for(i=0;ibits;i+)Outi
14、/8|=Ini(i%8);/|=voidXor(bool*InA,constbool*InB,intlen)for(inti=0;ilen;i+)InAgnBi;voidkeyfc(char*In)inti,j=0,mov,k;boolkey056,temp,keyin64;ByteToBit(keyin,In,64);for(i=0;i56;i+)/字节到位的转换/位到字节转换组合了位操作符和赋值操作符的功能/按位异或/获取密钥函数/字节到位的转换/密钥压缩为56位key0i=keyinKeyrari-1;for(i=0;i16;i+)/16轮密钥产生if(i=0|i=1|i=8|i=15)
15、mov=1;elsemov=2;for(k=0;kmov;k+)/分左右两块循环左移for(intm=0;m8;m+)temp=key0m*7;for(j=m*7;jm*7+7;j+)key0j=key0j+1;key0m*7+6=temp;temp=key00;for(m=0;m27;m+)key0m=key0m+1;key027=temp;temp=key028;for(m=28;m55;m+)key0m=key0m+1;key055=temp;for(j=0;j48;j+)/压缩置换并储存keyij=key0rarj-1;voidDES(charOut8,charIn8,boolMS)加
16、密核心程序,ms=0时加密,反之解密boolMW64,tmp32,PMW64;boolkzmw48,keytem48,ss32;inthang,lie;ByteToBit(PMW,In,64);for(intj=0;j64;j+)MWj=PMWipj-1;/初始置换bool*Li=&MW0,*Ri=&MW32;for(inti=0;i48;i+)右明文扩展置换kzmwi=Rieii-1;if(MS=0)/DES加密过程for(intlun=0;lun16;lun+)for(i=0;i32;i+)ssi=Rii;for(i=0;i48;i+)/右明文扩展置换kzmwi=Rieii-1;/注意指针
17、for(i=0;i48;i+)keytemi=keyluni;/轮密钥Xor(kzmw,keytem,48);/*S盒置换*/for(i=0;i8;i+)(hang=kzmwi*6*2+kzmwi*6+5;lie=kzmwi*6+1*8+kzmwi*6+2*4+kzmwi*6+3*2+kzmwi*6+4;tmpi*4+3=sboxi(hang+1)*16+lie%2;tmpi*4+2=(sboxi(hang+1)*16+lie/2)%2;tmpi*4+1=(sboxi(hang+1)*16+lie/4)%2;tmpi*4=(sboxi(hang+1)*16+lie/8)%2;for(inti=
18、0;i32;i+)/P置换Rii=tmpPzhi-1;Xor(Ri,Li,32);/异或for(i=0;i32;i+)/交换左右明文Lii=ssi;for(i=0;i32;i+)tmpi=Lii;Lii=Rii;Rii=tmpi;for(i=0;i=0;lun-)for(i=0;i32;i+)ssi=Rii;for(inti=0;i48;i+)右明文扩展置换kzmwi=Rieii-1;/注意指针for(i=0;i48;i+)keytemi=keyluni;/轮密钥Xor(kzmw,keytem,48);/*S盒置换*/for(i=0;i8;i+)hang=kzmwi*6*2+kzmwi*6+5
19、;lie=kzmwi*6+1*8+kzmwi*6+2*4+kzmwi*6+3*2+kzmwi*6+4;tmpi*4+3=sboxi(hang+1)*16+lie%2;tmpi*4+2=(sboxi(hang+1)*16+lie/2)%2;tmpi*4+1=(sboxi(hang+1)*16+lie/4)%2;tmpi*4=(sboxi(hang+1)*16+lie/8)%2;for(i=0;i32;i+)/P置换Rii=tmpPzhi-1;Xor(Ri,Li,32);/异或for(i=0;i32;i+)/交换左右明文Lii=ssi;for(i=0;i32;i+)tmpi=Lii;Lii=Rii
20、;Rii=tmpi;for(i=0;i64;i+)PMWi=MWfpi-1;BitToByte(Out,PMW,64);/位到字节的转换voidmain()charKi8,jm8,final8;inti0;cout请输入密钥(8字节):endl;for(i0=0;i0Kii0;keyfc(Ki);cout请输入明文(8字节):endl;for(i0=0;i0jmi0;DES(final,jm,0);cout加密后:endl;/力口密for(i0=0;i08;i0+)coutfinali0;coutendl;cout解密后:endl;DES(jm,final,1);/解密for(i0=0;i08
21、;i0+)coutjmi0;coutendl;2.1 初始置换初始置换在第一轮运算之前进行,对输入分组实施如下表所示的变换。初始置换把明文的第58位换到第1位的位置,把第50位换到第2位的位置,把第42位换到第3位的位置,依此类推。58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,462,54,46,38,30,22,14,6,64,56,48,40,32,24,16,857,49,41,33,25,17,9,1,59,51,43,35,27,19,11,361,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7初始置换和
22、对应的末置换并不影响DES的安全性,它们的主要目的是为了更容易地将明文和密文数据以字节大小放入DESK片中。2.2 密钥置换T首操就器之旦k1置操选库工佟卜二I吉惧民择?卢3ts图3密钥置换过程由于不考虑每个字节的第8位,DES的密钥由64位减至56位,每个字节第8位作为奇偶校验以确保密钥不发生错误。如下表所示:57,49,41,33,25,17,9,1,58,50,42,34,26,1810,2,59,51,43,35,27,19,11,3,60,52,44,3663,55,47,39,31,23,15,7,62,54,46,38,30,2214,6,61,53,45,37,29,21,13
23、,5,28,20,12,4在DES的每一轮中,从56位密钥产生出不同的48位子密钥(subkey),这些子密钥是这样确定的:首先,56位密钥被分成两部分,每部分28位。然后,根据轮数,这两部分分别循环左移1位或2位。每轮移动的位数如下表:2345678910111213141516位数1122222212移动后,就从56位中选出48位。这个运算既置换了每位的顺序,也选择了子密钥,被称为压缩置换(compressionpermutation)。下表即定义了压缩置换:14,17,11,24,1,5,3,28,15,6,21,1023,19,12,4,26,8,16,7,27,20,13,241,5
24、2,31,37,47,55,30,40,51,45,33,4844,49,39,56,34,53,46,42,50,36,29,32可以看出,第33位的那一位在输出时移到了第35位,而处于第18位的那一位被忽略2.3 扩展置换这个运算将数据的右半部分从32位扩展到48位。这个操作两方面的目的:它产生了与密钥同长度的数据以进行异或运算;它提供了更长的结果,使得在替代运算中能进行压缩。对每个4位输入分组,第1位和第4位分别表示输出分组中的两位,而第2位和第3位分别表示输出分组中的一位,下表给出了哪一输出位对应哪一输入位:32,1,2,3,4,5,4,5,6,7,8,98,9,10,11,12,13
25、,12,13,14,15,16,1716,17,18,19,20,21,20,21,22,23,24,2524,25,26,27,28,29,28,29,30,31,32,1处于输入分组中第3位的位置移到了输出分组中的第4位,而输入分组的第21位则移到了输出分组的第30位和第32位。尽管输出分组大于输入分组,但每一个输入分组产生唯一的输出分组。2.4 S盒代替R=(h国?1.3iitehrnni-RinrrTHmill切inirriurn图4扩展、s盒选择代替压缩后的密钥与扩展分组异或以后,将48位的结果送入,进行代替运算。替代由8个S盒完成,每一个S盒都由6位输入,4位输出,且这8个S盒是不
26、同的。48位的输入被分为8个6位的分组,每一个分组对应一个S盒代替操作:分组1由S盒1操作,分组2由S盒2操作,等等。如下图所示:每一个S盒是一个4行、16列的表。盒中的每一项都是一个4位的数。S盒白6个位输入确定了其对应的输出在哪一行哪一列。下表列出所有8个S盒:S盒1:14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,70,15,7,4,14,2,13,1,10,6,12,11,9,5,3,84,1,14,8,13,6,2,11,15,12,9,7,3,10,5,015,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13S盒2:15,1,8,14,6
27、,11,3,4,9,7,2,13,12,0,5,103, 13,4,7,15,2,8,14,12,0,1,10,6,9,11,50,14,7,11,10,4,13,1,5,8,12,6,9,3,2,1513,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9S盒3:10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,813,7,0,9,3,4,6,10,2,8,5,14,12,11,15,113,6,4,9,8,15,3,0,11,1,2,12,5,10,14,71,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12S盒4:7,13,1
28、4,3,0,6,9,10,1,2,8,5,11,12,4,1513,8,11,5,6,15,0,3,4,7,2,12,1,10,14,910, 6,9,0,12,11,7,13,15,1,3,14,5,2,8,43, 15,0,6,10,1,13,8,9,4,5,11,12,7,2,14S盒5:2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,914,11,2,12,4,7,13,1,5,0,15,10,3,9,8,64, 2,1,11,10,13,7,8,15,9,12,5,6,3,0,1411, 8,12,7,1,14,2,13,6,15,0,9,10,4,5,3S盒
29、6:12, 1,10,15,9,2,6,8,0,13,3,4,14,7,5,1113, 15,4,2,7,12,9,5,6,1,13,14,0,11,3,89,14,15,5,2,8,12,3,7,0,4,10,1,13,11,64,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13S盒7:4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,113,0,11,7,4,9,1,10,14,3,5,12,2,15,8,61,4,11,13,12,3,7,14,10,15,6,8,0,5,9,26,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12S盒8:1,15,13,8,10,3,7,4,12,5,6,1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度租赁合同:仓库租赁面积、租赁期限与租金支付3篇
- 2025版酒店装修施工及室内装饰材料采购合同
- 健身俱乐部会员权益及教练责任界定协议
- 二零二五年家用空调销售安装与智能化升级服务合同3篇
- 2024年重型钢轨焊接劳务分包正式合同
- 2024年综合性IT解决方案外包协议样本版
- 2024年私人房产买卖合同范本:继承房产交易3篇
- 2025年度版权质押合同:某艺术家与银行的版权质押贷款
- 爱国主义教育电影观后感
- 二零二五年度井盖采购合同含专利技术许可2篇
- 2025年1月山西、陕西、宁夏、青海普通高等学校招生考试适应性测试(八省联考)政治
- DB3707T 131-2024 城镇居民供热服务规范
- 《广东省智慧高速公路建设指南(试行)》
- 护理年终个人工作总结
- 社区中心及卫生院65岁及以上老年人健康体检分析报告模板
- 年度分析报告格式范文
- 2024年度吉林省国家电网招聘之法学类典型题汇编及答案
- 山东省临沂市2023-2024学年高一上学期1月期末考试 物理 含答案
- 2024年世界职业院校技能大赛中职组“婴幼儿保育组”赛项考试题库-下(多选、判断题)
- 2023年福建公务员录用考试《行测》真题卷及答案解析
- 中华人民共和国学前教育法
评论
0/150
提交评论