密码学实验报告三
更新时间:2023-11-14 00:06:01 阅读量: 教育文库 文档下载
《现代密码学》实验报告
年级、专业、班级 实验题目 实验时间 2014.11.20 实验成绩 2012级计算机科学与技术1班 姓名 陈康裕 对称密码算法DES 实验地点 实验性质 主教0410 ■验证性 □设计性 □综合性 教师评价: □算法/实验过程正确; □源程序/实验内容提交 □程序结构/实验步骤合理; □实验结果正确; □语法、语义正确; □报告规范; 其他: 评价教师签名: 一、 实验原理和目的 DES算法属于分组加密算法,即在明文加密和密文解密过程中,信息都是按照固定长度分组后进行处理的。混淆和扩散是它采用的两个最重要的安全特性。混淆是指通过密码算法使明文和密文以及密钥的关系非常复杂,无法从数学上描述或者统计。扩散是指明文和密钥中的每一位信息的变动,都会影响到密文中许多位信息的变动,从而隐藏统计上的特性,增加密码的安全。 DES算法将明文分成64位大小的众多数据块,即分组长度为64位。同时用56位密钥对64位明文信息加密,最终形成64位的密文。需要注意的地方是掌握DES算法的16轮加、解密流程以及子密钥的产生流程。 通过用DES算法对实际的数据进行加密和解密来深刻了解DES的运行原理。 报告创建时间:
二、实验项目内容 1、算法分析 (1)写出DES算法的16轮加、解密流程; (2)写出子密钥的产生流程; 2、下载DES算法的实现程序,并调用其程序对一个文件进行加密和解密,提交程序代码和执行结果。 3、调用下载的DES算法的实现程序对输入的十六进制数加密,比较输入和输出,当改变一个位时比较输出的变化,并说明原因。 三、实验过程或算法(源程序) 1、(1)DES算法的16轮加、解密流程: 加密流程 解密流程 (2)子密钥的产生流程:
子密钥产生流程 2、利用下列程序实现一个文件的加密和解密:(程序的主要代码,整个程序见附件) //密钥置换1 pc-1 int DES_PC1_Transform(ElemType key[64], ElemType tempbts[56]){ int cnt; for(cnt = 0; cnt < 56; cnt++){ tempbts[cnt] = key[PC_1[cnt]]; } return 0; } //密钥置换2 pc-2 int DES_PC2_Transform(ElemType key[56], ElemType tempbts[48]){ int cnt; for(cnt = 0; cnt < 48; cnt++){ tempbts[cnt] = key[PC_2[cnt]]; } return 0; } //E扩展置换 int DES_E_Transform(ElemType data[48]){ //这里data两种用处,故为48位极人臣 int cnt; ElemType temp[48]; for(cnt = 0; cnt < 48; cnt++){ temp[cnt] = data[E_Table[cnt]]; //这里data下标最高为32.
} memcpy(data,temp,48); return 0; } //P置换 int DES_P_Transform(ElemType data[32]){ int cnt; ElemType temp[32]; for(cnt = 0; cnt < 32; cnt++){ temp[cnt] = data[P_Table[cnt]]; } memcpy(data,temp,32); return 0; } //循环左移 //左右两边同时循环左移相同的位数. //10010循环左移1位为00101,左移2位为01010 int DES_ROL(ElemType data[56], int times){ ElemType temp[56]; //temp只保存将要循环到右边的位. //保存将要循环移动到右边的位 memcpy(temp,data,times); //保存前28位的移位 memcpy(temp+times,data+28,times); //保存后28位的移位极人臣 //前28位移动 memcpy(data,data+times,28-times); //一般移位 memcpy(data+28-times,temp,times); //循环位移动 //后28位移动 memcpy(data+28,data+28+times,28-times); memcpy(data+56-times,temp+times,times); return 0; } //生成子密钥 int DES_MakeSubKeys(ElemType key[64],ElemType subKeys[16][48]){ ElemType temp[56]; int cnt; DES_PC1_Transform(key,temp);//PC1置换 for(cnt = 0; cnt < 16; cnt++){//16轮跌代,产生16个子密钥 DES_ROL(temp,MOVE_TIMES[cnt]);//Ci Di 左右两边,循环左移 DES_PC2_Transform(temp,subKeys[cnt]);//PC2置换,产生子密钥 } return 0; } //异或
int DES_XOR(ElemType R[48], ElemType L[48] ,int count){ int cnt; for(cnt = 0; cnt < count; cnt++){ R[cnt] ^= L[cnt]; //异或即为模2加法 } return 0; } //S盒置换 48=8*6 32=8*4 int DES_SBOX(ElemType data[48]){ int cnt; int line,row,output; int cur1,cur2; for(cnt = 0; cnt < 8; cnt++){ cur1 = cnt*6; cur2 = cnt<<2; //计算在S盒中的行与列 b1b2b3b4b5b6 b1b2 //b3b4b5b6 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; //取得output二进制倒数第4位为0还是1 data[cur2+1] = (output&0X04)>>2; //output=7=0111 oxo4=0100 data[cur2+2] = (output&0X02)>>1; //相&得到0100 右移2位得到1 data[cur2+3] = output&0x01; } return 0; } 3、调用下载的DES算法的实现程序对输入的十六进制数加密。 四、实验结果及分析和(或)源程序调试过程 1、对一个文件的加密和解密: 明文在d:\\\\plaint.txt中:
正在阅读:
密码学实验报告三11-14
国际私法案例分析题学生用11-16
钢结构吊装方案 - 图文06-06
2014年12月1套听力原文及解析11-01
公司青年员工思想动态专题调研报告03-11
聚酰亚胺膜(PI膜)项目投资计划书05-26
银行实习心得体会范文大全08-01
自考中学语文教学法学习重点二11-09
《销售管理》配套练习题模拟试题有答案12-01
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 密码学
- 实验
- 报告
- 《健康评估》习题集
- 5-牛蛙骨髓染色体标本的制备与观察 - 图文
- 文明宿舍创建实施方案 -
- 沃尔沃评审内容(1)
- 维稳、信访工作组领导小组
- 川农研究生高级生化考试复习题
- 数字图像加密算法研究与实现
- 江南月《天窗》阅读练习及答案
- 物流仓库调查报告
- 2018-2023年中国文化娱乐行业现状分析与发展趋势研究报告目录
- 第六章 消化系统 - 图文
- 中山大学0硕士研究生招生考试范围或参考书目
- 红楼梦第六回问题及简介
- 犯罪学知识点
- 2020年八年级语文上册 第23课《核舟记》教案(新人教版).doc
- 《煤炭资源地质勘探要求规范》1987
- KSP中文游戏手册(基础) - 图文
- 2017-2018学年奉贤区调研测试物理二模卷
- 六年级下册英语一课一练-Unit1 How tall are you Part A 人教PEP含答案
- 高三优秀作文:人生拒绝抄袭