1、 密码学课程设计 实验报告 设计题目: 1、DES 的编程实现 2、DES 的短块处理 3、DES 的三圈差分攻击 学生姓名: 学生学号: 班 级: 指导老师: 时间:2012 年 2 月 25 日 目目 录录 DES 背景介绍: . 3 实验整体说明: 3 实验基础: 3 一、DES 的编程实现 . 3 一、实验目的 3 二、 实验原理 3 1、 加密过程 . 3 2、 解密过程 . 4 3、 密钥生成过程 . 5 4、 弱密钥的检测 . 5 三、 实验要求 5 四、 编程实现 6 1、 实验环境说明 . 6 2、 数据结构 . 6 3、核心函数介绍 6 5、遇到的问题及解决办法 7 二、
2、DES 的短块处理 . 8 一、 实验目的 8 二、 实验原理 8 三、 实验要求 8 四、 编程实现 8 1、实验环境说明 8 2、核心函数 8 三、DES 的三圈差分攻击 . 10 一、实验目的 10 二、实验原理 10 1、差分攻击的基础 10 2、差分攻击 10 三、 实验要求 13 四、 编程实现 13 1、 实验环境说明 . 13 3、 数据结构 . 13 4、核心函数介绍 13 五、 遇到的问题及解决方法 14 实验成果整体说明: 14 1、实验环境说明 14 2、 文件介绍 . 14 3、实验结果 15 实验特点与不足: 20 实验心得: 21 参考资料: 21 附录 22 的
3、加密过程图DES-1 DES 背景介绍:背景介绍: 数据加密标准(DES,Data Encryption Standard)是一种使用密钥加密的块密 码,1976 年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS) ,随 后在国际上广泛流传开来。 DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位 的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密 的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半 进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不 交换。DES 使用 16 个循环
4、,使用异或,置换,代换,移位操作四种基本运算。 这个算法因为包含一些机密设计元素,相对短的密钥长度以及被怀疑内含美 国国家安全局(NSA)的后门而在开始时是有争议的,因此 DES 因此受到了强 烈的学院派式的审查,并以此推动了现代的块密码及其密码分析的发展。 实验整体说明:实验整体说明: 由于三个实验题目都是关于 DES 的问题,故我将三个实验代码合写在了一 个.h文件中,在一个 MFC 工程文件中展示出来,故首先分析三个实验的基本原 理、基本知识,再在最后统一介绍编程实现。 实验基础:实验基础: 一、一、DES 的编程实现的编程实现 一、实验目的一、实验目的 1、通过实际编程,使学生进一步熟
5、悉密码算法 以及算法安全性的基本概念和原理。 2、培养学生将密码理论和技术应用于实际的能 力,使学生具备实施数据加、脱密和基本的密码分 析能力。 3、掌握 DES 的加密、脱密和密钥生成过程,加 深对 DES 算法的认识。 二、二、实验原理实验原理 1、加密过程 DES 是一个分组密码,使用长度为 56 比特的密 钥加密长度为 64 比特的明文,获得长度为 64 比特 的密文,其加密过程,如图 1。 (1) 给定一个明文 X,通过一个固定的初始置换 IP 置换 X 的比特,获得 X0,X0=IP(X)=L0R0,L0R0 解密过程图DES-3 函数图f-2 分别是 X0 的前 32 比特和后
6、32 比特。 (2) 然后进行 16 轮完全相同的运算, 有如下规则, 其中 01) pj+=(ai int changeb(char a,int p,int k)/*1 表示转换出错,0 表示正确,32 会转换成 00000100*/ int i,j=0,m,t; for(i=0; it; return 0; int change1(char a,int p,int k) /*1 表示转换出错, 0 表示正确,00100000 会转换成 32*/ int i,j=0,t; for(i=0; i=0; -t) ai+=pj+AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatically / when the applications main window is not a dialog SetIcon(m_hIcon, TR