版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信息安全与编码题目:实现DES算法DES加密解密算法1、问题背景科技的发展特别是网络的发展使计算机深入到了各行各业的方方面面,计算机在带来方便和提高了工作效率的同时却也带来了各种各样的新问题,其中信息安全问题最为突出,随着计算机信息安全要求的不断提高, 计算机保密系统已变得越来越重要,密码学应用不再是局限于军事、国防等有限领域,而是迅速的走进了千家万户。2、DES算法的进展算机通信网的发展对信息的安全保密的要求日益增长,未来的数据传输和存储都要求有密码保护,为了实现同一水平的安全性和兼容性,提出了数据加密标准化。美国国家标准局NBS(National Bureau of Standards)在
2、1973年5月13日的联邦记录中公布了一项公告,征求在传输和存储数据中保护计算机数据的密码算法的建议,这一举措最终导致了数据加密标准(DES)2,7,8,9,11的研制。DES是迄今为止世界上最为广泛使用和流行的一种分组密码算法,它是由美国IBM公司研制的,是早期的称作Lucifer密码的一种发展和修改。在做了大量公开讨论后,1977年1月15日DES正式被批准并作为美国联邦信息处理标准,同时规定每隔5年由美国国家保密局NSA ( National Security Agency ) 作出评估,并重新批准它是否继续作为联邦加密标准。DES是一种对二元数据进行加密的算法,数据分组长度为64bit
3、,输出密文分组长亦为64bit,没有数据扩展。密钥长度为64bit,其中有8bit为奇偶校验位,有效密钥长度为56bit,DES的整个体制是公开的,系统的安全性靠密钥的保密来承担。3、 DES简介DES(Data Encryption Standard)是由美国IBM公司于20世纪70年代中期的一个密码算(LUCIFER)发展而来,在1977年1月15日,美国国家标准局正式公布实施,并得到了ISO的认可,在过去的20多年时间里,DES被广泛应用于美国联邦和各种商业信息的保密工作中,经受住了各种密码分析和攻击,有很好的安全性。然而,目前DES算法已经被更为安全的Rijndael算法取代,但是DE
4、S加密算法还没有被彻底的破解掉,仍是目前使用最为普遍的对称密码算法。所以对DES的研究还有很大价值,在国内DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键的数据保密,如信用卡持卡人的PIN码加密传输,IC卡与POS机之间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。DES算法是一种采用传统的代替和置换操作加密的分组密码,明文以64比特为分组,密钥长度为64比特,有效密钥长度是56比特,其中加密密钥有8比特是奇偶校验,DES的加密和解密用的是同一算法,它的安全性依赖于所用的密钥。它首先把需要加密的明文划分为每64比特的二进制
5、的数据块,用56比特有效密钥对64比特二进制数据块进行加密,每次加密可对64比特的明文输入进行16轮的替换和移位后,输出完全不同的64比特密文数据。由于DES算法仅使用最大为64比特的标准算法和逻辑运算,运算速度快,密钥容易产生,适合于在大多数计算机上用软件快速实现,同样也适合于在专用芯片上实现。4、 AES算法加密解密原理 DES算法的加密过程首先对明文分组进行操作,需要加密的明文分组固定为64比特的块。图4-1是DES加密算法的加密流程。图4-2是密钥扩展处理过程。图4-1DES加密算法流程图4-2子密钥产生流程5、DES算法编程实现DES加密解密过程主要函数有:show1();/主界面s
6、how2();/加密界面reader();/读取明文和密钥To2Bin();/将字节转换成二进制流Replacement();/替换函数lif_move();/左移位实现函数SubKey();/子密钥产生函数S_compress();/S盒压缩变换,其中数组shc存放经过s盒的结果To10();/二进制转十进制To102();/二进制转十进制F_Function();/F函数Encryption();/加密函数changeKey();/Decryption();/解密函数print();/输出函数部分源程序代码如下:/加密函数void Encryption(int m064,int c164)
7、int i,k;int arry32;int c064,m164;Replacement(m0,IP_Table,m1,64); /初始置换IPfor(i=0;i32;i+)L0i=m1i;R0i=m1i+32;k=1;while(k17)F_Function(Rk-1,arry,k-1);for(i=0;i32;i+)Lki=Rk-1i;Rki=Lk-1iarryi;k+;for(i=0;i32;i+)c0i=R16i;c0i+32=L16i;Replacement(c0,IP_1_Table,c1,64); /逆初始置换/解密函数void Decryption(int c1,int m)i
8、nt c064,t64;int i,k;int arry32;changeKey(K);Replacement(c1,IP_Table,c0,64);/初始IPfor(i=0;i32;i+)L0i=c0i;R0i=c0i+32;k=1;while(k17)F_Function(Rk-1,arry,k-1);for(i=0;i32;i+)Lki=Rk-1i;Rki=Lk-1iarryi;k+;for(i=0;i32;i+)ti=R16i;ti+32=L16i;Replacement(t,IP_1_Table,m,64); /逆初始置换6、 运行结果图6.1为DES程序主界面图6.2为DES加密过
9、程(直接输入)图6.3为DES对刚加密的进行解密结果图6.4为DES解密过程 图6.5为DES加密过程(从文件中读取) 图6.6为DES加密过程加密文档截图从图中的运行结果可以得知,加密前的文件内容和解密后的文件内容相同,即验证了该程序的正确性。7、结束语通过这次程序设计,我学到了很多东西,首先更深入的理解了DES算法,不仅完完全全弄懂了DES算法的各个过程,像密钥产生过程中的左移位、S盒的压缩变换等,也能一一实现。其次也提高了编程技巧,在处理一些问题时能选择较佳的方法。因为在做这个软件的时候看了很多别人的代码,所以我还是学到了不少东西,我看到别人的封装更好,代码也整洁,使用一些更好的实现方法
10、。再看我代码,我就感觉我的代码重用率很差。还有一些编程方面的习惯也不太好。通过此次实践我发现很多不足,以后还要去弥补这些不足。附件:(程序源代码)#include#include#includevoid show1() /主界面printf(nnntt- DES加密解密系统 -nn);printf(tt*n);printf(tt*tttttt*n);printf(tt*ttt1.加密ttt*n);printf(tt*tttttt*n);printf(tt*ttt2.解密ttt*n);printf(tt*tttttt*n);printf(tt*ttt3.退出ttt*n);printf(tt*tt
11、tttt*n);printf(tt*n);void show2()/加密界面printf(nnntt- DES加密 -nn);printf(tt*n);printf(tt*tttttt*n);printf(tt*t请选择明文和密钥的输入方式:tt*n);printf(tt*tttttt*n);printf(tt*tt1.直接输入ttt*n);printf(tt*tttttt*n);printf(tt*tt2.从文件读取ttt*n);printf(tt*tttttt*n);printf(tt*tt3.退出tttt*n);printf(tt*tttttt*n);printf(tt*n);print
12、f(tt请输入您选择的序号:);void reader(char str30,char s8) /读取明文和密钥FILE *fp;fp=fopen(str,r);if(fp=NULL)printf(明文读取失败!n);elsefscanf(fp,%s,s);fclose(fp);void To2Bin(char p8,int b64) /将字节转换成二进制流int i,k=0;for(i=0;i=1) if(j&pi) bk+=1;elsebk+=0; int IP_Table64 = /初始置换(IP) 57, 49, 41, 33, 25, 17, 9, 1,59, 51, 43, 35,
13、 27, 19, 11, 3,61, 53, 45, 37, 29, 21, 13, 5,63, 55, 47, 39, 31, 23, 15, 7,56, 48, 40, 32, 24, 16, 8, 0,58, 50, 42, 34, 26, 18, 10, 2,60, 52, 44, 36, 28, 20, 12, 4,62, 54, 46, 38, 30, 22, 14, 6; int E_Table = /扩展变换E 31, 0, 1, 2, 3, 4, 3, 4, 5, 6, 7, 8, 7, 8, 9, 10, 11, 12, 11, 12, 13, 14, 15, 16, 15
14、, 16, 17, 18, 19, 20, 19, 20, 21, 22, 23, 24, 23, 24, 25, 26, 27, 28, 27, 28, 29, 30, 31, 0;int S_Box8416 = /8个s盒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,
15、6,13,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,13, 8,10, 1, 3,15, 4, 2,11, 6, 7,12, 0, 5,14, 9,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,
16、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, 7,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,11, 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, 2,12, 4, 1, 7,10,1
17、1, 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,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,11, 3, 8, 9,14,15, 5, 2, 8,12, 3, 7, 0, 4
18、,10, 1,13,11, 6, 4, 3, 2,12, 9, 5,15,10,11,14, 1, 7, 6, 0, 8,13, 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,13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12
19、, 7, 1,15,13, 8,10, 3, 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;int IP_1_Table64 =/逆初始置换IP-1 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,
20、 3, 43, 11, 51, 19, 59, 27,34, 2, 42, 10, 50, 18, 58, 26,33, 1, 41, 9, 49, 17, 57, 25,32, 0, 40, 8, 48, 16, 56, 24;int P_Table32 =/置换运算P15,6,19,20,28,11,27,16, 0,14,22,25,4,17,30,9, 1,7,23,13,31,26,2,8, 18,12,29,5,21,10,3,24; int PC_156 =56,48,40,32,24,16,8, /密钥置换PC_10,57,49,41,33,25,17, 9,1,58,50,4
21、2,34,26, 18,10,2,59,51,43,35, 62,54,46,38,30,22,14, 6,61,53,45,37,29,21, 13,5,60,52,44,36,28, 20,12,4,27,19,11,3; int PC_248 =/密钥置换PC_213,16,10,23,0,4,2,27,14,5,20,9,22,18,11,3,25,7,15,6,26,19,12,1, 40,51,30,36,46,54,29,39,50,44,32,47,43,48,38,55,33,52,45,41,49,35,28,31; void Replacement(int arry1,i
22、nt arry2,int arry3,int num)/置换函数(初始IP,逆初始IP,int i,tmp;for(i=0;inum;i+)tmp=arry2i;arry3i=arry1tmp;int move_times16 = 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1;/对左移位的规定void lif_move(int arry1,int arry2,int n) /左移位实现函数int i;for(i=0;i28;i+)arry2i=arry1(n+i)%28;int K1648;/存放16轮子密钥int c64;/存放明文或密文int L1732,R1732; /
23、存放加密过程中左右部分void SubKey(int K064)/子密钥产生函数int i;int K156,K256;int C1728,D1728;Replacement(K0,PC_1,K1,56);/密钥置换PC_1for(i=0;i28;i+)/将PC_1输出的56比特分为左右两部分C0i=K1i;D0i=K1i+28;i=0;while(i16)int j;lif_move(Ci,Ci+1,move_timesi);lif_move(Di,Di+1,move_timesi);for(j=0;j28;j+)K2j=Ci+1j;K2j+28=Di+1j;Replacement(K2,P
24、C_2,Ki,48);/密钥置换PC_2i+;void S_compress(int arry,int shc)/S盒压缩变换,其中数组shc存放经过s盒的结果int h,l;/行,列int sha8; /存放经过s盒的十进制结果int i,j;int temp4;for(i=0;i8;i+) /s盒压缩变换h=arry(1+(i*6)-1*2 + arry(6+(i*6)-1;l =arry(2+(i*6)-1*8 + arry(3+(i*6)-1*4 + arry(4+(i*6)-1*2 + arry(5+(i*6)-1; shai=S_Boxihl; for(i=0;i=0;j-)tem
25、pj=shai%2;shai=shai/2;for(j=0;j4;j+)shc4*i+j=tempj; void To10(int a, int b,int n)/二进制转十进制int i,j;int temp;int arry164;for(i=0;in/4;i+)for(j=0;j4;j+)arryij=a4*i+j;for (i=0;in/4;i+)temp=arryi0*8+arryi1*4+arryi2*2+arryi3*1;bi=temp;void To102(int a, int b,int n)/二进制转十进制int i,j;int temp;int arry88;int t=
26、1,k;for(i=0;in/8;i+)for(j=0;j8;j+)arryij=a8*i+j;for (i=0;i=0;j-)if(arryij=1)t=1;for(k=0;k7-j;k+)t=t*2;temp+=t;bi=temp;void F_Function(int a32,int b32,int n)/F函数int i;int tmp48;int tep32;Replacement(a,E_Table,tmp,48);/扩展变换Efor(i=0;i48;i+)/与子密钥异或tmpi = Kni;S_compress(tmp,tep); /压缩变换SReplacement(tep,P_
27、Table,b,32); /置换运算Pvoid Encryption(int m064,int c164)int i,k;int arry32;int c064,m164;Replacement(m0,IP_Table,m1,64); /初始置换IPfor(i=0;i32;i+)L0i=m1i;R0i=m1i+32;k=1;while(k17)F_Function(Rk-1,arry,k-1);for(i=0;i32;i+)Lki=Rk-1i;Rki=Lk-1iarryi;k+;for(i=0;i32;i+)c0i=R16i;c0i+32=L16i;Replacement(c0,IP_1_Ta
28、ble,c1,64); /逆初始置换void changeKey(int a1648)int i,j;int tmp1648;for(i=0;i16;i+)for(j=0;j48;j+)tmpij=aij;for(i=0;i16;i+)for(j=0;j48;j+)Kij=tmp15-ij;void Decryption(int c1,int m)int c064,t64;int i,k;int arry32;changeKey(K);Replacement(c1,IP_Table,c0,64);/初始IPfor(i=0;i32;i+)L0i=c0i;R0i=c0i+32;k=1;while(
29、k17)F_Function(Rk-1,arry,k-1);for(i=0;i32;i+)Lki=Rk-1i;Rki=Lk-1iarryi;k+;for(i=0;i32;i+)ti=R16i;ti+32=L16i;Replacement(t,IP_1_Table,m,64); /逆初始置换void print() /输出函数int i;int a12,b12,d316;int p64,q64;for(i=0;i32;i+)pi=L15i;p32+i=R15i;qi=R16i;qi+32=L16i;To10(K14,a,48);To10(K15,b,48);To10(c,d0,64);To10(
30、p,d1,64);To10(q,d2,64);printf(ntt15轮密钥:);for(i=0;i12;i+)printf(%x,ai);printf(t15轮结果:);for(i=0;i16;i+)printf(%X,d1i);printf(ntt16轮密钥:);for(i=0;i12;i+)printf(%X,bi);printf(t16轮结果:);for(i=0;i16;i+)printf(%X,d2i);printf(ntt最后结果:);for(i=0;i16;i+)printf(%X,d0i);int main()int num,i,t;char s18,s28;int m64;
31、/m存放二进制明文/密文int d64; /存放二进制密钥int s8;show1();printf(tt请输入您选择的序号:);while(1)scanf(%d,&num);switch(num)case 1:system(cls);/调用清屏函数show2();scanf(%d,&num);if(num=1)while(strlen(s1)!=8)printf(tt请输入明文(8):);scanf(%s,s1);To2Bin(s1,m);/将明文转换成二进制流while(strlen(s2)!=8)printf(tt请输入密钥(8):);scanf(%s,s2);To2Bin(s2,d);
32、/将密钥转换成二进制SubKey(d);Encryption(m,c);print();printf(ntt按0将此密文解密,1返回上一层,2返回主界面,其他键退出.);scanf(%d,&t);if(t=0)int s8;int a64;Decryption(c,a);To102(a,s,64);system(cls);printf(ntt解密结果:);for(i=0;i8;i+)printf(%c,si);show1();printf(tt请输入您选择的序号:);else if(t=1)system(cls);show2();else if(t=2)system(cls);show1();printf(tt请输入您选择的序号:);elseexit(0);else if(num=2)char str120,str220;printf(tt请输入明文文件名:);scanf(%s,str1);reader(str1,s1);To2Bin(s1,m);printf(tt请输入密钥文件名:);scanf(%s,str2);reader(str2,s2);To2Bin(s2,d);SubKey(d);Encryption(m,c);print();printf(ntt按0将此密文解密,1将密文存入文件,2返回主界面,其他键退出.);scanf(%d,&t);if(t=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮企业安全生产管理制度模版(3篇)
- 2024年上半年企业办公室工作总结范文(2篇)
- 2021年10月贵州能投产业集团有限公司关于公开引进总经理助理等职务的模拟卷(一)
- 2021年10月广西柳州市柳北区市场监督管理局公开招聘编外合同制协办员工作人员冲刺题(一)
- 临时建筑物的设计建造及使用规定模版(3篇)
- 易燃易爆危险品使用管理制度例文(五篇)
- 2024年供电所所长竞聘演讲稿(5篇)
- 2024年行政部年度工作计划范文(二篇)
- 2024年竞职医院副院长的演讲(6篇)
- 市场督导岗位职责模版(2篇)
- 3.1DNA是主要的遗传物质课件20232024高一下学期生物人教版必修二
- 智能制造(智改数转)架构设计解决方案
- 在线网课知道智慧《硬核赢创新(山大)》单元测试答案
- 中班语言《金色的秋天》课件
- 教学病例讨论模板
- 高考语文复习:诗歌比较阅读
- 林业工程竣工报告
- 从偏差行为到卓越一生3.0版
- 失血性休克患者的麻醉处理
- 2024网站渗透测试报告
- DG-TJ08-2433A-2023 外墙保温一体化系统应用技术标准(预制混凝土反打保温外墙)
评论
0/150
提交评论