您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 信息安全与编码-实现DES算法-报告
信息安全与编码题目:实现DES算法DES加密解密算法1、问题背景科技的发展特别是网络的发展使计算机深入到了各行各业的方方面面,计算机在带来方便和提高了工作效率的同时却也带来了各种各样的新问题,其中信息安全问题最为突出,随着计算机信息安全要求的不断提高,计算机保密系统已变得越来越重要,密码学应用不再是局限于军事、国防等有限领域,而是迅速的走进了千家万户。2、DES算法的进展算机通信网的发展对信息的安全保密的要求日益增长,未来的数据传输和存储都要求有密码保护,为了实现同一水平的安全性和兼容性,提出了数据加密标准化。美国国家标准局NBS(NationalBureauofStandards)在1973年5月13日的联邦记录中公布了一项公告,征求在传输和存储数据中保护计算机数据的密码算法的建议,这一举措最终导致了数据加密标准(DES)[2],[7],[8],[9],[11]的研制。DES是迄今为止世界上2最为广泛使用和流行的一种分组密码算法,它是由美国IBM公司研制的,是早期的称作Lucifer密码的一种发展和修改。在做了大量公开讨论后,1977年1月15日DES正式被批准并作为美国联邦信息处理标准,同时规定每隔5年由美国国家保密局NSA(NationalSecurityAgency)作出评估,并重新批准它是否继续作为联邦加密标准。DES是一种对二元数据进行加密的算法,数据分组长度为64bit,输出密文分组长亦为64bit,没有数据扩展。密钥长度为64bit,其中有8bit为奇偶校验位,有效密钥长度为56bit,DES的整个体制是公开的,系统的安全性靠密钥的保密来承担。3、DES简介DES(DataEncryptionStandard)是由美国IBM公司于20世纪70年代中期的一个密码算(LUCIFER)发展而来,在1977年1月15日,美国国家标准局正式公布实施,并得到了ISO的认可,在过去的20多年时间里,DES被广泛应用于美国联邦和各种商业信息的保密工作中,经受住了各种密码分析和攻击,有很好的安全性。然而,目前DES算法已经被更为安全的Rijndael算法取代,但是DES加密算法还没有被彻底的破解掉,仍是目前使用最为普遍的对称密码算法。所以对DES的研究还有很大价值,在国内DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键的数据保密,如信用卡持卡人的PIN码加密传输,IC卡与POS机之间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。DES算法是一种采用传统的代替和置换操作加密的分组密码,明文以64比特为分组,密钥长度为64比特,有效密钥长度是56比特,其中加密密钥有8比特是奇偶校验,DES的加密和解密用的是同一算法,它的安全性依赖于所用的密钥。它首先把需要加密的明文划分为每64比特的二进制的数据块,用56比特有效密钥对64比特二进制数据块进行加密,每次加密可对64比特的明文输入进行16轮的替换和移位后,3输出完全不同的64比特密文数据。由于DES算法仅使用最大为64比特的标准算法和逻辑运算,运算速度快,密钥容易产生,适合于在大多数计算机上用软件快速实现,同样也适合于在专用芯片上实现。4、AES算法加密解密原理DES算法的加密过程首先对明文分组进行操作,需要加密的明文分组固定为64比特的块。图4-1是DES加密算法的加密流程。图4-2是密钥扩展处理过程。4图4-1DES加密算法流程5图4-2子密钥产生流程5、DES算法编程实现DES加密解密过程主要函数有:show1();//主界面show2();//加密界面reader();//读取明文和密钥To2Bin();//将字节转换成二进制流Replacement();//替换函数lif_move();//左移位实现函数SubKey();//子密钥产生函数S_compress();//S盒压缩变换,其中数组shc存放经过s盒的结果To10();//二进制转十进制To102();//二进制转十进制F_Function();//F函数Encryption();//加密函数6changeKey();//Decryption();//解密函数print();//输出函数部分源程序代码如下://加密函数voidEncryption(intm0[64],intc1[64]){inti,k;intarry[32];intc0[64],m1[64];Replacement(m0,IP_Table,m1,64);//初始置换IPfor(i=0;i32;i++){L[0][i]=m1[i];R[0][i]=m1[i+32];}k=1;while(k17){F_Function(R[k-1],arry,k-1);for(i=0;i32;i++){L[k][i]=R[k-1][i];R[k][i]=L[k-1][i]^arry[i];}k++;}for(i=0;i32;i++){c0[i]=R[16][i];c0[i+32]=L[16][i];}Replacement(c0,IP_1_Table,c1,64);//逆初始置换7}//解密函数voidDecryption(intc1[],intm[]){intc0[64],t[64];inti,k;intarry[32];changeKey(K);Replacement(c1,IP_Table,c0,64);//初始IPfor(i=0;i32;i++){L[0][i]=c0[i];R[0][i]=c0[i+32];}k=1;while(k17){F_Function(R[k-1],arry,k-1);for(i=0;i32;i++){L[k][i]=R[k-1][i];R[k][i]=L[k-1][i]^arry[i];}k++;}for(i=0;i32;i++){t[i]=R[16][i];t[i+32]=L[16][i];}Replacement(t,IP_1_Table,m,64);//逆初始置换}86、运行结果图6.1为DES程序主界面图6.2为DES加密过程(直接输入)图6.3为DES对刚加密的进行解密结果9图6.4为DES解密过程图6.5为DES加密过程(从文件中读取)图6.6为DES加密过程加密文档截图10从图中的运行结果可以得知,加密前的文件内容和解密后的文件内容相同,即验证了该程序的正确性。7、结束语通过这次程序设计,我学到了很多东西,首先更深入的理解了DES算法,不仅完完全全弄懂了DES算法的各个过程,像密钥产生过程中的左移位、S盒的压缩变换等,也能一一实现。其次也提高了编程技巧,在处理一些问题时能选择较佳的方法。因为在做这个软件的时候看了很多别人的代码,所以我还是学到了不少东西,我看到别人的封装更好,代码也整洁,使用一些更好的实现方法。再看我代码,我就感觉我的代码重用率很差。还有一些编程方面的习惯也不太好。通过此次实践我发现很多不足,以后还要去弥补这些不足。11附件:(程序源代码)#includestdio.h#includestdlib.h#includestring.hvoidshow1()//主界面{printf(\n\n\n\t\t------------------DES加密解密系统----------------\n\n);printf(\t\t**************************************************\n);printf(\t\t**\t\t\t\t\t\t**\n);printf(\t\t**\t\t\t1.加密\t\t\t**\n);printf(\t\t**\t\t\t\t\t\t**\n);printf(\t\t**\t\t\t2.解密\t\t\t**\n);printf(\t\t**\t\t\t\t\t\t**\n);printf(\t\t**\t\t\t3.退出\t\t\t**\n);printf(\t\t**\t\t\t\t\t\t**\n);printf(\t\t**************************************************\n);}voidshow2()//加密界面{printf(\n\n\n\t\t--------------------DES加密--------------------\n\n);printf(\t\t**************************************************\n);printf(\t\t**\t\t\t\t\t\t**\n);printf(\t\t**\t请选择明文和密钥的输入方式:\t\t**\n);printf(\t\t**\t\t\t\t\t\t**\n);printf(\t\t**\t\t1.直接输入\t\t\t**\n);printf(\t\t**\t\t\t\t\t\t**\n);printf(\t\t**\t\t2.从文件读取\t\t\t**\n);printf(\t\t**\t\t\t\t\t\t**\n);12printf(\t\t**\t\t3.退出\t\t\t\t**\n);printf(\t\t**\t\t\t\t\t\t**\n);printf(\t\t**************************************************\n);printf(\t\t请输入您选择的序号:);}voidreader(charstr[30],chars[8])//读取明文和密钥{FILE*fp;fp=fopen(str,r);if(fp==NULL){printf(明文读取失败!\n);}else{fscanf(fp,%s,s);}fclose(fp);}voidTo2Bin(charp[8],intb[64])//将字节转换成二进制流{inti,k=0;for(i=0;i8;i++){intj=0x80;for(;j;j=1){if(j&p[i]){b[k++]=1;}else{b[k++]=0;}}}}intIP_Table[64]=//初始置换(IP){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,56,48,40,32,24,16,8,0,58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,1362,54,46,38,30,22,14,6};intE_Table[]={//扩展变换E31,0,1,2,3,4,3,4,5,6,7,8,7,8,9,10,11,12,11,12,13,14,15,16,15,16,17,18,19,20,19,20,21,22,23,24,23,24,25,26,27,28,27,28,29,30,31,0};intS_Box[8][4][16]={//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,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,
本文标题:信息安全与编码-实现DES算法-报告
链接地址:https://www.777doc.com/doc-2691757 .html