DES算法实验报告.doc_第1页
DES算法实验报告.doc_第2页
DES算法实验报告.doc_第3页
DES算法实验报告.doc_第4页
DES算法实验报告.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实 验 报 告 姓名:xxxx 学 号:0XXXXX 班级:XXXXXXX 日期:2013/11/*题目:DES算法实验一、实验环境 1硬件配置:处理器:Inter(R) Core(TM) i5-2430M CPU 2.40GHz (4 CPUs) ,2.4GHz内存:2048MB RAM2使用软件:(1) 操作系统:win7 旗舰版(2) 软件工具:Microsoft Visual c+ 6.0二、实验涉及的相关概念或基本原理 DES是一个分组密码算法,使用64位密钥(除去8位奇偶校验,实际密钥长度为56位)对64比特的数据分组(二进制数据)加密,产生64位密文数据。DES是一个对称密码体制,加密和解密使用同意密钥,解密和加密使用同一算法(这样,在硬件与软件设计时有利于加密单元的重用)。DES的所有的保密性均依赖于密钥。DES的加密过程可分为加密处理,加密变换和子密钥生成几个部分组成。1.加密处理过程 (1)初始置换IP。加密处理首先要对64位的明文按表1所示的初始换位表IP进行变换。表中的数值表示输入位被置换后的新位置。 (2)加密处理。上述换位处理的输出,中间要经过16轮加密变换。初始置换的64位的输出作为下一次的输入,将64位分为左、右两个32位,分别记为L0和R0,从L0、R0到L16、R16,共进行16轮加密变换。其中,经过i轮处理后的点左右32位分别为Li和Ri则可做如下定义: Li=Ri-1 Ri=Li-1 F(Ri-1,K) 其中,F为F变换(3)最后换位。进行16轮的加密变换之后,将L16和R16合成64位的数据,再按照表2所示的最后换位表进行IP-1的换位,得到64位的密文,这就是DES算法加密的结果。2.加密变换过程 64位的密钥先由置换选择1减少至56六位,进行循环左移,然后通过置换选择2减少至48位。而通过扩展运算将32位按表3扩展换位表扩展为48位的右半部分通过异或操作和48位的密钥结合,并分成6位的8个分组,通过8个S-盒将这48位替代成新的32位数据。 按此进行,输出32位,再按照表4 换位表P进行变换,这样就完成了F(R,K)的变换。3.子密钥生成过程 密钥通常表示为64位的自然数,首先通过压缩换位Key_Exchange去掉每个字节的第8位,用作奇偶校验。因此,密钥去掉第8、16、2464位减至56位,所以实际密钥长度为56位。而每轮要生成48位的子密钥。输入的64位密钥,首先通过压缩换位得到56位的密钥,每层分成两部分,一部分28位为C0,一部分为D0。C0和D0依次进行循环左移操作生成了C1和D1,将C1和D1合成56位,再通过压缩换位Compression输出48位的子密钥K1,再将C1和D1进行循环左移和Compression压缩换位,得到子密钥K2以此类推,得到16个子密钥。密钥压缩换位表如表5表6所示。在产生子密钥的过程中左移次数如表7所示。4.解密处理过程 从密文到明文的解密过程可采用与加密完全相同的算法。不过解密要用加密的逆变换,就是把上面的最后换位表和初始换位表完全倒过来变换。三、实验内容流程图:主要代码:初始置换unsigned char Initial =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,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;逆初始置换unsigned char Final =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;扩展变换Eunsigned char Expansion =32, 1, 2, 3, 4, 5,4, 5, 6, 7, 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_盒置换unsigned char P_Box=16, 7, 20, 21, 29, 12, 28, 17,1, 15, 23, 26, 5, 18, 31, 30,2, 8, 24, 14, 32, 27, 3, 9,19, 13, 30, 6, 22, 11, 4, 25;S盒置换unsigned char S_Box8416 =/* S1 */ 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,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 */ 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,/* 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,11, 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, 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;置换选择1unsigned char Key_Exchange56 =57, 49, 41, 33, 25, 17, 9,1, 58, 50, 42, 34, 26, 18,10, 2, 59, 51, 43, 35, 27,19, 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;置换选择2unsigned char Compression =14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,23, 19, 12, 4, 26, 9, 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;循环左移位数unsigned char Key_Move=1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 1;产生子密钥int Key_Process(bool key64,bool Sub_Key1648 ) int round ; bool temp56; Key_Transform1(key,temp); for(round=0;round16;round+) Key_Rotate(temp,Key_Moveround) ; Key_Transform2(temp,Sub_Keyround); return 0;异或int XOR(bool KR48,bool KL48 ,int count) int i; for(i=0;icount;i+) KRi=KLi; return 0;加密算法int DES_Encrypt(bool Message8,bool Sub_Key1648,bool Final_Result8) bool Expanded_Right48; bool Result64; int round; Char8ToBit64(Message,Result); Initial_Exchange(Result); for(round=0;round=0;round-) memcpy(Expanded_Right,Result+32,32); M_Expand(Expanded_Right); XOR(Expanded_Right,Sub_Keyround,48); S_function(Expanded_Right); P_function(Expanded_Right); XOR(Result,Expanded_Right,32); if(round!= 0) Swap(Result,Result+32); Final_Exchange(Result); Bit64ToChar8(Result,Message); return 0;加密文件int DES_EncryptFile(char *Final_Result) FILE *input,*output; int count; unsigned name30; unsigned char key64; bool InputBlock8,OutputBlock8,keyBlock8; bool bKey64; bool Sub_Key1648; printf(输入文件名n); scanf(%s,name); printf(输入密钥n); scanf(%s,key); getchar(); if(input=fopen(name,rb) = NULL) return 0; if(output=fopen(Final_Result,wb) = NULL) return 0; memcpy(keyBlock,key,8); Char8ToBit64(keyBlock,bKey); Key_Process(bKey,Sub_Key); while(!feof(input) if(count=fread(InputBlock,sizeof(char),8,input) = 8) DES_Encrypt(InputBlock,Sub_Key,OutputBlock); fwrite(OutputBlock,sizeof(char),8,output); if(count) memset(InputBlock+ count,0,7 - count); InputBlock7 = 8 - count; DES_Encrypt(InputBlock,Sub_Key,OutputBlock); fwrite(OutputBlock,sizeof(char),8,output); fclose(input); fclose(output); return 1;解密文件int DES_DecryptFile(char *Message) FILE *input, *output; int count,times = 0; long fileLen; unsigned name30; unsigned char key64; bool inputBlock8,outputBlock8,keyBlock8; bool bKey64; bool Sub_Key1648; printf(输入文件名n); scanf(%s,name); printf(输入密钥n); scanf(%s,key); getchar(); if(output = fopen(name,rb) =

温馨提示

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

评论

0/150

提交评论