DES加密解密课程设计报告

合集下载

DES加密解密实验报告

DES加密解密实验报告

DES加密解密实验报告实验报告题目:DES加密解密实验一、实验目的1.了解DES加密算法的工作原理。

2. 学习使用Python编程语言实现DES加密算法。

3.掌握DES加密算法的应用方法。

二、实验原理DES(Data Encryption Standard)是一种用于加密的对称密钥算法,其密钥长度为64位,分为加密过程和解密过程。

1.加密过程(1)初始置换IP:将64位明文分成左右两部分,分别为L0和R0,进行初始置换IP操作。

(2)子密钥生成:按照规则生成16个子密钥,每个子密钥长度为48位。

(3)迭代加密:通过16轮迭代加密运算,得到最终的密文。

每轮迭代加密包括扩展置换、异或运算、S盒替代、P置换和交换操作。

(4)逆初始置换:将最终的密文分成左右两部分,进行逆初始置换操作,得到最终加密结果。

2.解密过程解密过程与加密过程类似,但是子密钥的使用顺序与加密过程相反。

三、实验材料与方法材料:电脑、Python编程环境、DES加密解密算法代码。

方法:1. 在Python编程环境中导入DES加密解密算法库。

2.输入明文和密钥。

3.调用DES加密函数,得到密文。

4.调用DES解密函数,得到解密结果。

5.输出密文和解密结果。

四、实验步骤1.导入DES加密解密算法库:```pythonfrom Crypto.Cipher import DES```2.输入明文和密钥:```pythonplaintext = "Hello World"key = "ThisIsKey"```3.创建DES加密对象:```pythoncipher = DES.new(key.encode(, DES.MODE_ECB) ```。

DES课程设计报告

DES课程设计报告

海南大学信息科学技术学院课程设计报告DES算法加密与解密的设计与实现课程名称:应用密码学学生姓名:学生学号:专业班级:任课教师:吴汉伟2013年06 月05 日目录一,DES简介 (2)二,DES加密原理 (2)三,DES解密原理........................................................................................ 错误!未定义书签。

四,DES模块分析........................................................................................ 错误!未定义书签。

1,DES轮密钥生成.............................................................................. 错误!未定义书签。

1.1轮密钥生成流程图....................................................................... 错误!未定义书签。

1.2置换选择1 (4)1.3循环左移 (5)1.4置换选择2 (6)2,初始置换 (6)3,拓展置换E (6)4,异或函数一 (7)5,选择压缩变换S盒代替 (7)6,置换运算P ....................................................................................... 错误!未定义书签。

7,异或函数二....................................................................................... 错误!未定义书签。

8,逆初始置换....................................................................................... 错误!未定义书签。

des课程设计报告

des课程设计报告

des课程设计报告一、教学目标本课程的教学目标是使学生掌握XX学科的基本知识,理解XX学科的基本概念、原理和方法,提高学生的实际操作能力,培养学生的创新意识和科学素养。

通过本课程的学习,学生应能:1.掌握XX学科的基本概念、原理和方法,能运用所学知识解决实际问题。

2.具备良好的科学思维习惯,能够运用科学的方法分析问题、解决问题。

3.能够运用现代技术手段获取和处理信息,提升信息素养。

4.培养团队协作精神和沟通表达能力,提升社会责任感和公民素养。

二、教学内容根据课程目标,本课程的教学内容主要包括XX学科的基本概念、原理和方法,实际操作训练以及相关领域的拓展知识。

具体包括:1.XX学科的基本概念:介绍XX学科的基本定义、特点和意义,使学生建立对XX学科的整体认识。

2.XX学科的基本原理:阐述XX学科的核心原理,通过实例分析帮助学生理解和掌握。

3.XX学科的方法技巧:教授XX学科的研究方法和技术手段,培养学生的实际操作能力。

4.实际操作训练:安排一系列实际操作练习,使学生在实践中巩固所学知识和技能。

5.相关领域拓展知识:介绍XX学科在其他领域的应用和拓展,激发学生的学习兴趣和好奇心。

三、教学方法本课程采用多种教学方法,包括讲授法、讨论法、案例分析法、实验法等,以激发学生的学习兴趣和主动性。

1.讲授法:通过教师的系统讲解,使学生掌握XX学科的基本知识和原理。

2.讨论法:学生进行分组讨论,培养学生的思考能力和团队协作精神。

3.案例分析法:通过分析典型案例,使学生学会将理论知识应用于实际问题解决中。

4.实验法:安排实验课程,培养学生的实际操作能力和科学探究精神。

四、教学资源为支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选用国内权威的XX学科教材,确保知识的科学性和系统性。

2.参考书:推荐学生阅读相关领域的经典著作和最新研究论文,拓宽知识视野。

3.多媒体资料:制作精美的PPT、视频等多媒体资料,提高课堂教学效果。

DES_加密解密算法C实现--实验报告des算法实验

DES_加密解密算法C实现--实验报告des算法实验

DES_加密解密算法C实现--实验报告des算法实验.....1实验一1、实验题目利用C/C++编程实现DES加密算法或MD5加密算法。

我选择的是用C++语言实现DES的加密算法。

2、实验目的通过编码实现DES算法或MD5算法,深入掌握算法的加密原理,理解其实际应用价值,同时要求用C/C++语言实现该算法,让我们从底层开始熟悉该算法的实现过程3、实验环境操作系统:WIN7旗舰版开发工具:VisualStudio2022旗舰版开发语言:C++4、实验原理DES加密流程2如上图所示为DES的加密流程,其中主要包含初始置换,压缩换位1,压缩换位2,扩展置换,S盒置换,异或运算、终结置换等过程。

初始置换是按照初始置换表将64位明文重新排列次序扩展置换是将原32为数据扩展为48位数据,它主要由三个目的:1、产生与子密钥相同的长度2、提供更长的结果,使其在加密过程中可以被压缩3、产生雪崩效应,使得输入的一位将影响两个替换S盒置换是DES算法中最核心的容,在DES中,只有S盒置换是非线性的,它比DES中其他任何一步都提供更好的平安性终结置换与初始置换相对应,它们都不影响DES的平安性,主要目的是为了更容易将明文与密文数据一字节大小放入DES的f算法中DES解密流程与加密流程根本相同,只不过在进行16轮迭代元算时,将子密钥生成的K的次序倒过来进行迭代运算5、实验过程记录在对DES算法有了清晰的认识后,编码过程中我将其分为几个关键局部分别进行编码,最后将整个过程按顺序执行,即可完成DES的加密,代码的主要几个函数如下://Byte转为BitByteToBit(ElemTypech,ElemTypebit[8])//Bit转为ByteBitToByte(ElemTypebit[8],ElemType&ch)//初始置换InitialE某(ElemTypeInorder[64],ElemTypeDisorder[64])//终结置换AntiE某(ElemTypeDisorder[64])//扩展置换E某pandE某(ElemTypeRightMsg[32],ElemTypeE某pandMsg[48])//16轮迭代加密MoveLeft(ElemTypeC[28],ElemTypeD[28],ElemTypeL0[32],ElemType R0[32])3//16轮迭代解密mMoveLeft(ElemTypeC[28],ElemTypeD[28],ElemTypeL0[32],ElemTyp eR0[32])//生成48位子密钥GetCD48(ElemTypeC[28],ElemTypeD[28],ElemTypeSecret[48])//48位明文与子密钥进行异或运算某OR(ElemTypeE某pandMsg[48],ElemTypeSecret[48],ElemTypeResult[48])//S盒四位输出getSOut(ElemTypeResult[48],ElemTypeSout[32])//直接置换DirE某change(ElemTypeSout[32],ElemTypeDirOut[32])//Li与Ri 进行抑或运算某ORLR(ElemTypeDirOut[32],ElemTypeLeft[32],ElemTypeResult[32])函数执行次序和调用关系关系如下:6.源代码//DES.cpp:定义控制台应用程序的入口点。

DES加密算法课程设计报告

DES加密算法课程设计报告

DES加密算法课程设计报告软件实现流程图开始输入密文和密钥密文和密钥转换成二进制,存储在文件中读出64位密文和密钥 64位密钥进行pc-1置换,生成56位 56位比特串分成左右各28位。

C[i]与D[i],i=0; C[i]与D[i]左移一位或者两位,左移表决定左移位数Ls[16].左移产生C[i+1]与D[i+1] C[i+1]与D[i+1]合并为56位比特串,并进行pc-2置换,产生子密钥keys[i+1],i++; i>15 N Y 节点1加密过程节点 1 64位明文进行IP置换后进行分组Li[32]与Ri[32];i=0 Ri[32]进行E扩展,生成48位比特串。

48位比特串与子密钥keys[i+1]进行异或运算。

得到的48位比特串分为8组,进入8个S盒中,并按照S盒的规则输出8个十进制数将8个十进制数转换为32位比特串。

32位比特串进行P置换,产生新的32位比特串 32位比特串与Li[32]进行异或,产生R(i+1)[32] L(i+1)[32]=Ri[32];i++ N i>15 Y R16[32]在前,L16[32]在后进行合并,合并后进行IP逆置换,即产生密文结束 1开始输入密文和密钥密文和密钥转换成二进制,存储在文件中读出64位密文和密钥 64位密钥进行pc-1置换,生成56位 56位比特串分成左右各28位。

C[i]与D[i],i=0;C[i]与D[i]左移一位或者两位,左移表决定左移位数Ls[16].左移产生C[i+1]与D[i+1] C[i+1]与D[i+1]合并为56位比特串,并进行pc-2置换,产生子密钥keys[i+1],i++; i>15 N Y 节点1加密过程节点 1 64位明文进行IP置换后进行分组Li[32]与Ri[32];i=0 Ri[32]进行E扩展,生成48位比特串。

48位比特串与子密钥keys[i+1]进行异或运算。

得到的48位比特串分为8组,进入8个S盒中,并按照S盒的规则输出8个十进制数将8个十进制数转换为32位比特串。

DES加密解密实验报告

DES加密解密实验报告
1. 存储置换表的取值
用一维数组存储初始置换表 IP、逆置换表 IP_1、密钥置换表 PC_1、压缩密钥置换表 PC_2、
循环左移表、扩展置换表 E 盒和 P 置换盒,用三维数组存放 8 个 4*16 的 S 盒。
实现位置:Des.h 的 private 成员 代码如下:
// 初始置换表IP int IP[64] = { 58, 50, 42, 34, 26, 18, 10, 2,
3)终结置换 IP-1:按照终结置换表进行终结置换,64 位输出就是密文。 其中,在每一轮的子加密过程中,48 位的明文数据要与 48 位的子密钥进行异或运算。 子密钥的产生过程如下:
<1>对输入的密钥经过 PC1 置换输出 56 位数据,划分为 2 部分,每部分 28 位,左半部 分记为 C,右半部分记为 D。
1. DES 加密 ......................................................................................2 2. DES 解密 ......................................................................................5 四、程序实现 ...................................................................................... 5 1. 存储置换表的取值......................................................................5 2. 生成子密钥 ................................................................................. 8 3. 实现 F 函数 .................................................................................9 4. DES 加密 ....................................................................................10 5. 测试代码 ................................................................................... 11 五、程序运行初值及结果 ................................................................. 14 六、实验体会 .................................................................................... 14

des密码学课程设计

des密码学课程设计

des密码学课程设计一、课程目标知识目标:1. 理解DES密码学的基本概念,掌握加密算法的原理和流程;2. 学会使用DES算法进行加密和解密操作;3. 了解密码学在信息安全领域的重要性和应用。

技能目标:1. 能够运用所学知识,独立完成DES加密和解密的过程;2. 培养学生的逻辑思维能力和问题解决能力,提高他们在实际应用中运用密码学知识的技能;3. 提升学生的团队协作能力,通过小组讨论和实践,共同完成密码学相关任务。

情感态度价值观目标:1. 培养学生对密码学学习的兴趣,激发他们探索信息安全领域的热情;2. 增强学生的信息安全意识,认识到密码学在保护个人和国家安全中的重要性;3. 培养学生严谨、客观、负责的科学态度,使他们能够正确评价密码学在现实生活中的价值。

本课程针对年级学生的特点,注重理论与实践相结合,充分调动学生的积极性、主动性和创造性。

在教学过程中,将目标分解为具体的学习成果,使学生在掌握知识的同时,提高技能和情感态度价值观。

为后续的教学设计和评估提供明确的方向。

二、教学内容本课程教学内容紧密结合课程目标,确保科学性和系统性。

具体包括以下部分:1. 引言:介绍密码学的基本概念、发展历程以及DES算法的产生背景。

- 教材章节:第一章 密码学概述2. DES算法原理:讲解DES算法的加密过程、解密过程以及密钥生成方法。

- 教材章节:第二章 对称加密算法3. DES算法实现:分析DES算法的具体实现步骤,包括初始置换、子密钥生成、轮函数等。

- 教材章节:第三章 DES算法详解4. 应用案例分析:通过实际案例,介绍DES算法在信息安全领域的应用。

- 教材章节:第四章 密码学应用实例5. 实践操作:指导学生使用相关工具进行DES加密和解密操作,巩固所学知识。

- 教材章节:第五章 密码学实验6. 总结与拓展:对DES算法进行总结,引导学生思考其优点与局限性,介绍其他密码学算法。

教学内容按照以上大纲进行安排,注重理论与实践相结合,循序渐进地引导学生掌握密码学知识。

des算法课程设计总结

des算法课程设计总结

des算法课程设计总结一、课程目标知识目标:1. 让学生理解DES算法的基本原理,掌握其加密与解密过程;2. 学会运用DES算法对数据进行安全加密,理解密钥的作用及生成方法;3. 了解DES算法在信息安全领域的应用及其优缺点。

技能目标:1. 培养学生运用编程语言实现DES算法的能力;2. 培养学生分析问题、解决问题的能力,能够针对实际需求设计合适的加密方案;3. 提高学生的团队协作能力,学会在小组讨论中分享观点,共同完成任务。

情感态度价值观目标:1. 培养学生对信息安全领域的兴趣,激发学习热情;2. 增强学生的信息安全意识,认识到保护数据安全的重要性;3. 培养学生严谨、细致的学习态度,提高自主学习和终身学习的意识。

课程性质:本课程为信息技术学科,结合学生年级特点,注重理论与实践相结合,以培养学生的实际操作能力和创新能力为主。

学生特点:学生具备一定的编程基础,对信息安全有一定了解,好奇心强,喜欢探索新知识。

教学要求:结合课程内容,注重启发式教学,引导学生主动参与课堂讨论,提高学生的实践操作能力。

在教学过程中,关注学生的个体差异,因材施教,确保每个学生都能达到课程目标。

通过课程学习,使学生能够将所学知识应用于实际生活,提高其信息安全素养。

二、教学内容1. 理论知识:- DES算法的基本原理与加密流程;- DES算法的密钥生成与使用方法;- DES算法的解密过程及安全性分析;- DES算法在信息安全领域的应用及优缺点。

2. 实践操作:- 使用编程语言(如Python、C++等)实现DES算法;- 设计并实现一个基于DES算法的加密通信系统;- 分析并改进DES算法,提高其安全性。

3. 教学大纲:- 第一课时:介绍DES算法的基本原理,学习加密流程;- 第二课时:学习密钥生成与使用方法,进行加密实践;- 第三课时:学习解密过程,分析DES算法的安全性;- 第四课时:了解DES算法的应用及优缺点,进行实践操作;- 第五课时:小组讨论,总结学习成果,展示实践项目。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

D E S加密解密课程设计报告Prepared on 22 November 2020成都信息工程学院课程设计报告DES算法加密与解密的设计与实现课程名称:密码算法程序设计学生姓名:学生学号:专业班级:任课教师:XX年 XX 月 XX 日目录1背景DES算法概述DES(Data Encryption Standard)是由美国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轮的替换和移位后,输出完全不同的64比特密文数据。

由于DES算法仅使用最大为64比特的标准算法和逻辑运算,运算速度快,密钥容易产生,适合于在大多数计算机上用软件快速实现,同样也适合于在专用芯片上实现。

DES算法描述DES算法的加密过程首先对明文分组进行操作,需要加密的明文分组固定为64比特的块。

图1-1是DES加密算法的加密流程。

图1-2是密钥扩展处理过程。

图1-1DES加密算法流程图1-2子密钥产生流程2系统设计系统主要目标(1)用C++设计一个DES加密/解密软件系统;(2)完成一个明文分组的加解密,明文和密钥是ASCII码,长度都为8个字符,输入明文和密钥,输出密文,进行加密后,能够进行正确的解密;(3)程序运行时,要求输出第15、16轮的密钥,以及第15、16轮加密或解密之后的值,16进制表示;(4)程序有良好的人机交互操作;(5)要求从两个文件分别读取明文和密钥,并在程序中输出明文及密钥;(6)要求提供所设计系统的报告及完整的软件。

系统运行环境本软件用C语言编写,编写时所用的工具主要是Microsoft Visual C++。

编辑成功后的.EXE文件可以在装有windows系统的任何计算机上使用。

测试平台:Windows 7旗舰版使用软件:Microsoft Visual C++3功能需求分析整体功能分析DES算法一轮的功能分析4模块划分初始置换首先输入64比特的明文块,按照初始置换(IP)表进行置换,DES初始置换表如图3-1所示。

图4-1 初始置换表轮结构经过DES算法第一阶段的初始置换得到的64比特块分为两部分,前32位为左半部分,后32位为右半部分,如上面图3-2所示,DES算法的论结构分为左右两部分32比特在每一轮中被独立处理。

具体过程为:下一轮左半部分32比特L i等于上一轮右半部分32比特R i−1;而下一轮右半部分的32比特R i的计算则是由上一轮右半部分R i−1和轮密钥K i输入到F函数中进行变换,变换结果与上一轮左半部分L i进行异或运算,得到R i。

因此每一轮的变换可由下面公式表示:L i=R1−1R i=L i−1⊕F(R i−1,K i)E盒扩充变换将右半部分的32比特,进行E盒扩展,扩展成为48比特。

具体变换过程为把输入的32比特按照8行4列方式依次排列,形成一个8*4矩阵,然后E 盒扩展之后输出8*6矩阵。

图4-2 E盒扩展S盒压缩变换将E盒的输出与子密钥进行异或得到的48比特作为S盒的输入,进入S 盒变换,48比特压缩为32比特。

S盒的安全性能是保证DES算法安全性的源泉,DES算法共有8个不同的S盒,每个S盒接受6位输入,输出4位。

8个S 盒如下:P盒置换S盒输出的32比特经过P盒置换,重新编排32比特的位置。

下图为P 盒置换过程。

图4-3P盒置换逆初始置换DES算法进行完16轮运算之后,需要进行逆初始置换,逆初始置换正好为初始置换的逆,如一个矩阵进行初始置换之后输出,在进行依次逆初始置换的输出结果为初始矩阵。

5程序分模块实现将字符串转换成二进制流用ToBin()函数把输入的明文、密钥、密文转换为二进制流,其中p是输入的字符串,b是转换后的二进制流。

void To2Bin(char p[],int b[]) {int i=0,k=0;for(i=0;i<8;i++){int j=0x80;for(;j;j>>=1){if(j&p[i]){b[k++]=1;}else{b[k++]=0;}}}}子密钥的产生子密钥产生函数:SubKey(),其中参数K0为输入的密钥。

用到Replacement()函数,此函数实现密钥PC_1置换,和PC_2置换。

Lif_move()函数实现每一轮的左移位功能。

void SubKey(int K0[]) //子密钥产生函数{int i=0;int K1[56],K2[56];int C[17][28],D[17][28];Replacement(K0,PC_1,K1,56); //密钥置换PC_1for(i=0;i<28;i++) //将PC_1输出的56比特分为左右两部分{C[0][i]=K1[i];D[0][i]=K1[i+28];}i=0;while(i<16){int j;lif_move(C[i],C[i+1],move_times[i]);lif_move(D[i],D[i+1],move_times[i]);for(j=0;j<28;j++){K2[j]=C[i+1][j];K2[j+28]=D[i+1][j];}Replacement(K2,PC_2,K[i],48); //密钥置换PC_2i++;}}函数的计算F函数为加密做准备,其中的Replacement()实现E盒扩展,P盒置换。

S_compress()函数实现S盒的压缩变化。

void F_Function(int a[32],int b[32],int n) //F函数{int i;int tmp[48];int tep[32];Replacement(a,E_Table,tmp,48);for(i=0;i<48;i++){tmp[i]=tmp[i]^K[n][i];}S_compress(tmp,tep);Replacement(tep,P_Table,b,32);}16轮加密的实现Encryption()函数实现16轮加密,其中F_Function()函数即为F函数。

void Encryption(int m0[64],int c1[64]){int i,k;int arry[32];int c0[64],m1[64];Replacement(m0,IP_Table,m1,64); //初始置换IPfor(i=0;i<32;i++){L[0][i]=m1[i];R[0][i]=m1[i+32];}k=1;while(k<17){F_Function(R[k-1],arry,k-1);for(i=0;i<32;i++){L[k][i]=R[k-1][i];R[k][i]=L[k-1][i]^arry[i];}k++;}for(i=0;i<32;i++){c0[i]=R[16][i];c0[i+32]=L[16][i];}Replacement(c0,IP_1_Table,c1,64); //逆初始置换}把二进制转换为10进制转换为十进制是为输出16进制做准备,To10()函数把每四个字节转换成一个10进制数。

解密的实现解密函数Decryption(),解密过程中先有change()函数把密钥互换,然后用和加密相同的算法则可正确解密。

程序运行界面预览可根据需要选择加密和解密,加密又可选择直接输入明文和密钥或是从文件读取明文和密钥。

6测试报告程序总体运行情况加密情况:密钥中间过程16轮子密钥如下:子密钥生成过程中的值:经过测试这些函数,能够得到正确的16轮密钥加密过程的中间结果初始二进制明文和密钥:初始IP:第一轮E盒扩展结果:第一轮S盒输出:第一轮P盒置换结果:IP逆置换:经过对个函数的测试,能正确加密。

解密过程的中间结果解密的密钥还是加密时的密钥,得到16轮子密后,将顺序全部颠倒一下。

因为解密过程与加密过相返。

准备解密的密文:初始IP:第一次E盒扩展:第一次S盒压缩:第一次P盒置换:解密后的二进制结果:经过对个函数的测试,能正确加密。

7课程报告总结通过这次程序设计,我学到了很多东西,首先更深入的理解了DES算法,不仅完完全全弄懂了DES算法的各个过程,像密钥产生过程中的左移位、S盒的压缩变换等,也能一一实现。

其次也提高了编程技巧,在处理一些问题时能选择较佳的方法。

因为在做这个软件的时候看了很多别人的代码,所以我还是学到了不少东西,我看到别人的封装更好,代码也整洁,使用一些更好的实现方法。

再看我代码,我就感觉我的代码重用率很差。

还有一些编程方面的习惯也不太好。

通过此次实践我发现很多不足,以后还要去弥补这些不足。

参考文献:[1] 谭浩强C程序设计(第三版)清华大学出版社2009[2]张世斌万武南张金全孙宣东现代密码学西安电子科技大学出版社2009。

相关文档
最新文档