




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2页共14页PAGE四川大学工商管理学院实验教学大纲中北大学大学软件学院《网络攻击与防御》实验报告计算机科学与技术学院计算机系网络教研室制计算机科学与技术学院计算机系网络教研室制课程名称:信息安全技术实验名称:DES加密算法指导教师:班级:学生姓名:学号:实验日期:16-5-1016:00-17:45实验地点:软件学院实验成绩:实验报告书PAGE1一、实验目的通过用DES算法对实际数据进行加密和解密来深刻了解DES的运行原理,进而加深对对称加密算法的理解与认识。预备知识:1)数据加密标准(DES,DataEncryptionStandard)是一种使用密钥加密的块密码,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。它基于使用56位密钥的对称算法。这个算法因为包含一些机密设计元素,相对短的密钥长度以及怀疑内含美国国家安全局(NSA)的后门而在开始时有争议,因此DES因此受到了强烈的学院派式的审查,并以此推动了现代的块密码及其密码分析的发展。
2)DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。3)DES算法的安全性,DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。1999年1月,与电子前哨基金会合作,在22小时15分钟内即公开破解了一个DES密钥。也有一些分析报告提出了该算法的理论上的弱点,虽然在实际中难以应用。为了提供实用所需的安全性,可以使用DES的派生算法3DES来进行加密,虽然3DES也存在理论上的攻击方法。在2001年,DES作为一个标准已经被高级加密标准(AES)所取代。4)对称密码算法(Symmetriccipher):加密密钥和解密密钥相同,或实质上等同,即从一个易于推出另一个。又称传统密码算法(Conventionalcipher)、秘密密钥算法或单密钥算法。5)分组密码(Blockcipher):将明文分成固定长度的组,用同一密钥和算法对每一块加密,输出也是固定长度的密文。——DES、IDEA、RC2、RC4、RC5分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。6)CAP(CryptographicAnalysisProgram)是由DR.RichardSpillman专门为教学而研制的密码制作与分析工具,已经在美国的很多高校得到了广泛地使用,受到了密码学习者的普遍欢迎。二、实验环境操作系统:运行Windows,VS2010编译环境。三、实验内容与实验要求对学号姓名加解密任务一:DES加解密算法的原理}return0;}//将长度为8的字符串转为二进制位串intChar8ToBit64(ElemTypech[8],ElemTypebit[64]){intcnt;for(cnt=0;cnt<8;cnt++){ByteToBit(*(ch+cnt),bit+(cnt<<3));}return0;}//将二进制位串转为长度为8的字符串intBit64ToChar8(ElemTypebit[64],ElemTypech[8]){intcnt;memset(ch,0,8);for(cnt=0;cnt<8;cnt++){BitToByte(bit+(cnt<<3),ch+cnt);}return0;}//密钥置换1intDES_PC1_Transform(ElemTypekey[64],ElemTypetempbts[56]){intcnt;for(cnt=0;cnt<56;cnt++){tempbts[cnt]=key[PC_1[cnt]];}return0;}//密钥置换2intDES_PC2_Transform(ElemTypekey[56],ElemTypetempbts[48]){intcnt;for(cnt=0;cnt<48;cnt++){tempbts[cnt]=key[PC_2[cnt]];}return0;}//循环左移intDES_ROL(ElemTypedata[56],inttime){ElemTypetemp[56];//保存将要循环移动到右边的位memcpy(temp,data,time);memcpy(temp+time,data+28,time);//前28位移动memcpy(data,data+time,28-time);memcpy(data+28-time,temp,time);//后28位移动memcpy(data+28,data+28+time,28-time);memcpy(data+56-time,temp+time,time);return0;}//生成子密钥intDES_MakeSubKeys(ElemTypekey[64],ElemTypesubKeys[16][48]){ElemTypetemp[56];intcnt;DES_PC1_Transform(key,temp);//PC1置换for(cnt=0;cnt<16;cnt++){//16轮跌代,产生16个子密钥DES_ROL(temp,MOVE_TIMES[cnt]);//循环左移DES_PC2_Transform(temp,subKeys[cnt]);//PC2置换,产生子密钥}return0;}//IP置换intDES_IP_Transform(ElemTypedata[64]){intcnt;ElemTypetemp[64];for(cnt=0;cnt<64;cnt++){temp[cnt]=data[IP_Table[cnt]];}memcpy(data,temp,64);return0;}//IP逆置换intDES_IP_1_Transform(ElemTypedata[64]){intcnt;ElemTypetemp[64];for(cnt=0;cnt<64;cnt++){temp[cnt]=data[IP_1_Table[cnt]];}memcpy(data,temp,64);return0;}//扩展置换intDES_E_Transform(ElemTypedata[48]){intcnt;ElemTypetemp[48];for(cnt=0;cnt<48;cnt++){temp[cnt]=data[E_Table[cnt]];}memcpy(data,temp,48);return0;}//P置换intDES_P_Transform(ElemTypedata[32]){intcnt;ElemTypetemp[32];for(cnt=0;cnt<32;cnt++){temp[cnt]=data[P_Table[cnt]];}memcpy(data,temp,32);return0;}//异或intDES_XOR(ElemTypeR[48],ElemTypeL[48],intcount){intcnt;for(cnt=0;cnt<count;cnt++){R[cnt]^=L[cnt];}return0;}//S盒置换intDES_SBOX(ElemTypedata[48]){intcnt;intline,row,output;intcur1,cur2;for(cnt=0;cnt<8;cnt++){cur1=cnt*6;cur2=cnt<<2;//计算在S盒中的行与列line=(data[cur1]<<1)+data[cur1+5];row=(data[cur1+1]<<3)+(data[cur1+2]<<2)+(data[cur1+3]<<1)+data[cur1+4];output=S[cnt][line][row];//化为2进制data[cur2]=(output&0X08)>>3;data[cur2+1]=(output&0X04)>>2;data[cur2+2]=(output&0X02)>>1;data[cur2+3]=output&0x01;}return0;}//交换intDES_Swap(ElemTypeleft[32],ElemTyperight[32]){ElemTypetemp[32];memcpy(temp,left,32);memcpy(left,right,32);memcpy(right,temp,32);return0;}//加密单个分组intDES_EncryptBlock(ElemTypeplainBlock[8],ElemTypesubKeys[16][48],ElemTypecipherBlock[8]){ElemTypeplainBits[64];ElemTypecopyRight[48];intcnt;Char8ToBit64(plainBlock,plainBits);//初始置换(IP置换)DES_IP_Transform(plainBits);//16轮迭代for(cnt=0;cnt<16;cnt++){memcpy(copyRight,plainBits+32,32);//将右半部分进行扩展置换,从32位扩展到48位DES_E_Transform(copyRight);//将右半部分与子密钥进行异或操作DES_XOR(copyRight,subKeys[cnt],48);//异或结果进入S盒,输出32位结果DES_SBOX(copyRight);//P置换DES_P_Transform(copyRight);//将明文左半部分与右半部分进行异或DES_XOR(plainBits,copyRight,32);if(cnt!=15){//最终完成左右部的交换DES_Swap(plainBits,plainBits+32);}}//逆初始置换(IP^1置换)DES_IP_1_Transform(plainBits);Bit64ToChar8(plainBits,cipherBlock);return0;}//解密单个分组intDES_DecryptBlock(ElemTypecipherBlock[8],ElemTypesubKeys[16][48],ElemTypeplainBlock[8]){ElemTypecipherBits[64];ElemTypecopyRight[48];intcnt;Char8ToBit64(cipherBlock,cipherBits);//初始置换(IP置换)DES_IP_Transform(cipherBits);//16轮迭代for(cnt=15;cnt>=0;cnt--){memcpy(copyRight,cipherBits+32,32);//将右半部分进行扩展置换,从32位扩展到48位DES_E_Transform(copyRight);//将右半部分与子密钥进行异或操作DES_XOR(copyRight,subKeys[cnt],48);//异或结果进入S盒,输出32位结果DES_SBOX(copyRight);//P置换DES_P_Transform(copyRight);//将明文左半部分与右半部分进行异或DES_XOR(cipherBits,copyRight,32);if(cnt!=0){//最终完成左右部的交换DES_Swap(cipherBits,cipherBits+32);}}//逆初始置换(IP^1置换)DES_IP_1_Transform(cipherBits);Bit64ToChar8(cipherBits,plainBlock);return0;}//加密文件intDES_Encrypt(char*plainFile,char*keyStr,char*cipherFile){FILE*plain,*cipher;intcount;ElemTypeplainBlock[8],cipherBlock[8],keyBlock[8];ElemTypebKey[64];ElemTypesubKeys[16][48];if((plain=fopen(plainFile,"rb"))==NULL){returnPLAIN_FILE_OPEN_ERROR;}if((cipher=fopen(cipherFile,"wb"))==NULL){returnCIPHER_FILE_OPEN_ERROR;}//设置密钥memcpy(keyBlock,keyStr,8);//将密钥转换为二进制流Char8ToBit64(keyBlock,bKey);//生成子密钥DES_MakeSubKeys(bKey,subKeys);while(!feof(plain)){//每次读8个字节,并返回成功读取的字节数if((count=fread(plainBlock,sizeof(char),8,plain))==8){DES_EncryptBlock(plainBlock,subKeys,cipherBlock);fwrite(cipherBlock,sizeof(char),8,cipher);}}if(count){//填充memset(plainBlock+count,'\0',7-count);//最后一个字符保存包括最后一个字符在内的所填充的字符数量plainBlock[7]=8-count;DES_EncryptBlock(plainBlock,subKeys,cipherBlock);fwrite(cipherBlock,sizeof(char),8,cipher);}fclose(plain);fclose(cipher);returnOK;}//解密文件intDES_Decrypt(char*cipherFile,char*keyStr,char*plainFile){FILE*plain,*cipher;intcount,times=0;longfileLen;ElemTypeplainBlock[8],cipherBlock[8],keyBlock[8];ElemTypebKey[64];ElemTypesubKeys[16][48];if((cipher=fopen(cipherFile,"rb"))==NULL){returnCIPHER_FILE_OPEN_ERROR;}if((plain=fopen(plainFile,"wb"))==NULL){returnPLAIN_FILE_OPEN_ERROR;}//设置密钥memcpy(keyBlock,keyStr,8);//将密钥转换为二进制流Char8ToBit64(keyBlock,bKey);//生成子密钥DES_MakeSubKeys(bKey,subKeys);//取文件长度fseek(cipher,0,SEEK_END);//将文件指针置尾fileLen=ftell(cipher);//取文件指针当前位置rewind(cipher);//将文件指针重指向文件头while(1){//密文的字节数一定是8的整数倍fread(cipherBlock,sizeof(char),8,cipher);DES_DecryptBlock(cipherBlock,subKeys,plainBlock);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级下册数学教案-4.1 容积|北师大版
- 2025年机动车典当合同
- 六年级上册数学教案-总复习 你会算吗-求阴影部分的面积|北师大版
- 2025年科研合作协议
- 第四单元骄人祖先 灿烂文化整体教学设计-2024-2025学年道德与法治五年级上册统编版
- Unit 3 I'm more outgoing than my sister. SectionB 1a-1e教学设计2024-2025学年人教版英语八年级上册
- 2025年湖北三峡职业技术学院单招职业适应性测试题库汇编
- 2024年全脑开发项目资金申请报告代可行性研究报告
- 2025年嘉兴南洋职业技术学院单招职业技能测试题库完整
- 2025年共青科技职业学院单招职业适应性测试题库完整版
- 校园食品安全和膳食经费管理方案3篇
- TSGD7002-2023-压力管道元件型式试验规则
- 九年级化学下册 第12单元 化学与生活教案 (新版)新人教版
- 金融服务消费纠纷调解工作规范
- 后腹腔镜下输尿管切开取石术
- 二手车购买收据合同范本
- 《国际贸易实务(英文版)》(英文课件) - Ch 1 Introduction to International Trade Practices-Ch 5 Price
- 2022版义务教育英语课程标准整体解读课件
- 2024精美复工复产安全培训
- 01 H5入门知识课件
- 2024年企业管理咨询服务费简单合同范本
评论
0/150
提交评论