《信息安全、DES和AES加密解密》课程设计

合集下载

3.4加密与解密第一课时教学设计2023—2024学年教科版(2019)高中信息技术必修1

3.4加密与解密第一课时教学设计2023—2024学年教科版(2019)高中信息技术必修1
3. 确定教学媒体和资源的使用
(1)PPT:制作精美的PPT,展示加密与解密的基本概念、原理和算法,方便学生理解和记忆。
(2)视频:播放与加密与解密相关的视频,如加密技术的发展历程、实际应用案例等,丰富学生的感性认识。
(3)在线工具:利用在线加密与解密工具,让学生实时体验加密与解密过程,提高学生的实践能力。
(3)RSA算法的应用:本节课重点让学生了解RSA算法的原理及其在实际应用中的重要性,如数字签名、加密通信等。
2. 教学难点:
(1)对称加密和非对称加密的原理:学生难以理解对称加密和非对称加密的原理,尤其是非对称加密中公钥和私钥的生成、分发和使用的复杂性。
(2)哈希函数的数学原理:学生难以理解哈希函数的数学原理,如雪崩效应、抗碰撞性等。
二、新课讲授(用时10分钟)
1. 理论介绍:首先,我们要了解加密与解密的基本概念。加密是一种将信息转换为不可读形式的技术,而解密则是将加密后的信息还原为原始形式的技术。加密与解密在信息安全领域具有重要作用,可以保护信息的机密性,防止信息被未经授权的第三方获取。
2. 案例分析:接下来,我们来看一个具体的案例。这个案例展示了加密与解密在实际中的应用,以及它们如何帮助我们解决问题。例如,电子邮件加密可以确保邮件内容在传输过程中不被他人窃取,数字签名可以验证信息的完整性和发送者的身份。
2. 设计具体的教学活动
(1)角色扮演:让学生扮演加密与解密的各方角色,如信息发送者、接收者、加密算法开发者等,增进学生对加密与解密技术实际应用的理解。
(2)实验操作:安排实验室实践环节,让学生动手实现加密与解密过程,提高学生的实际操作能力。
(3)游戏设计:设计加密与解密主题的游戏,让学生在游戏中学习加密与解密技术,提高学生的学习兴趣。

des算法程序课程设计

des算法程序课程设计

des算法程序课程设计一、课程目标知识目标:1. 学生能理解DES算法的基本原理和加密流程;2. 学生能掌握DES算法中置换、替代、循环左移等关键步骤的操作方法;3. 学生能了解DES算法在实际应用中的优缺点及安全性分析。

技能目标:1. 学生能运用编程语言(如Python、C++等)实现DES加密和解密程序;2. 学生能通过实际操作,分析并解决DES算法编程过程中遇到的问题;3. 学生能对DES算法进行优化,提高加解密的效率。

情感态度价值观目标:1. 学生通过学习DES算法,培养对网络安全的认识和责任感;2. 学生在团队协作中,学会沟通、分享和分工合作,提高解决问题的能力;3. 学生在学习过程中,树立正确的信息安全观念,关注我国密码学领域的发展。

课程性质:本课程为信息技术学科,以算法编程为核心,旨在提高学生的实践操作能力和网络安全意识。

学生特点:学生为高中生,具有一定的编程基础和逻辑思维能力,对网络安全感兴趣。

教学要求:结合课本内容,注重理论与实践相结合,鼓励学生动手实践,培养创新意识和团队合作精神。

通过本课程的学习,使学生能够掌握DES算法的基本原理和编程技能,提高网络安全素养。

二、教学内容1. 引入:回顾密码学基本概念,引导学生了解加密技术在网络安全中的应用。

2. 理论知识:- DES算法原理:讲解Feistel网络结构、初始置换、16轮迭代、最终置换等过程;- 密钥生成:阐述子密钥生成过程,包括密钥置换、循环左移、压缩置换等步骤;- 置换和替代:介绍置换表、S盒等在加密过程中的作用。

3. 实践操作:- 编程实现:指导学生运用编程语言(如Python、C++等)实现DES算法的加密和解密功能;- 算法分析:通过实例,分析DES算法的安全性,讨论可能的攻击方法;- 优化改进:引导学生思考如何优化DES算法,提高加解密速度。

4. 教学进度安排:- 第1课时:回顾密码学基本概念,引入DES算法;- 第2课时:讲解DES算法原理,分析加密流程;- 第3课时:学习密钥生成过程,理解置换和替代操作;- 第4课时:编程实现DES算法,分析算法安全性;- 第5课时:优化DES算法,总结课程内容。

《信息安全、DES和AES加密解密》课程设计

《信息安全、DES和AES加密解密》课程设计

信息安全概论院(系):专业班级:姓名:学号:日期:地点:指导教师:成绩:一、课程设计目标1.通过信息安全课程设计,能够增强我们对信息安全的认识,更加牢固的掌握信息安全概论相关知识。

2.综合运用学习到的理论知识,提高实践能力。

3.通过小组讨论形式对任务进行分解,提出实现方案,制定计划,小组成员分工协作,共同完成课程设计题目,培养团队合作能力。

4.运用熟悉的程序语言编写程序,增强对程序语言的运用。

5.课程设计期间,通过对问题的分析查找资料,培养资料查询以及运用现代信息技术获取相关信息并进行归纳总结的基本能力。

6.与同学讨论,互相学习,提升个人学习能力。

二、课程设计内容1课程设计的内容1.1确定课程设计方向:经过小组成员的商讨,确定了使用c#语言,编写一个对文件进行加密加密的小程序,运用DES算法,实现对文件的加密解密后,再添加一些小的功能,用AES算法,实现对字符串的加密解密。

1.2 查阅资料:通过查找文件加解密的资料以及查阅了相关的加密解密算法,学习了对文件加密解密的基本思路,与实现方法。

1.3界面设程序计:设计一个整体界面,有三个按钮,其中两个分别实现对应文件的加密解密和字符串的加密解密,还有一个退出程序功能按钮。

1.4程序设计:有了思路和方法,接着就借助c#语言分别实现对文件的加密解密,以及对字符串的加密解密小程序。

1.5 后期调试:程序实现后,对其进行调试,发现不合适的地方及时纠正。

1.6完成课程设计:写课程设计报告,完成课程设计。

2原理介绍2.1 DES加密原理DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。

这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。

使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。

DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

AES 文件加密解密 课程设计报告

AES 文件加密解密 课程设计报告

关键字 :
AES
Rijndael算法

页, 共

AES 加密解密的实现
1. 背景
AES, 密码学中的 高级加密标准 ( Advanced Encryption Standard, AES) , 又称 Rijndael 加密算法,是美 国联邦政府采用的一种区块加密 标准。这个 标准用来替代 原先的 DES,已经被多方分 析且广为全世界所使用 。经过五年 的甄选流程, 高级加密标准由美国国家标准与 技术研究院( NIST) 于 2001 年 11 月 26 日 发布于 FIPS PUB 197, 并在 2002 年 5 月 26 日成为有 效的标 准。 2006 年,高级加密标准已然成为 对称密钥加密中最流行的算法 之一。 AES 有一个固定的 128 位的 块大小和 128, 192 或 256 位大小 的 密 钥 大 小 。 该算法为比利 时密码学家 Joan Daemen 和 Vincent Rijmen 所设计,结 合两位作者的 名字, 以 Rijndael 之命名之 , 投稿高级加密标 准的甄选流程。 ( Rijdael 的发音近于 "Rhine doll"。) AES 在软体及硬件上都能快速地加 解密,相对来说较易于实作,且只需要很少的记忆体。作一个新的加密标准, 目前正被部署应用到更广大的范围。

页, 共

摘要
随着现代密码分析水平、芯片处理能力和计算技术的不断进步,高级加密标 准AES的Rijndael算法将在各行业各部门获得了广泛的应用,成为虚拟专用网、 SONET、远程访问服务器、高速ATM以太网路由器、移动通信、卫星通信、电子金 融业务等的加密算法, 并逐渐取代DES在IPSec、 SSL和 ATM中的加密功能。 目前, IEEE 802.11草案已经定义了AES加密的两种不同运行模式,成功解决了无限局域 网标准中的诸多安全问题。在这种情形下,AES算法的安全性及其快速实现问题 显得格外突出。文章阐述了Rijndael算法的设计特色,详细介绍了AES具体的加 密解密算法函数。此外,AES算法具有抵抗强力攻击的能力,抵抗差分分析和线 性密码分析的能力,抵抗渗透攻击和代数计算攻击的能力,抵抗XSL攻击和弱密 钥分析的能力。从这几个方面可以说明AES具有良好的安全性能。另外,我们根 据算法的安全性、代价以及算法与实现特性的原则实现了AES简单常用的加密解 密算法。

AES课程设计报告--AES加密解密的实现

AES课程设计报告--AES加密解密的实现

课程设计报告AES加密解密的实现课程名称:密码算法程序设计学生姓名:学生学号:专业班级:任课教师:2011年6 月24 日附件:课程设计成绩评价表目录1.背景与意义 (1)2. 系统设计 (1)系统主要目标 (1)主要软件需求(运行环境) (2)功能模块与系统结构 (2)3 系统功能程序设计 (3)基本要求部分 (3)3.1.1 字节替换 (4)行移位 (5)列混合 (6)密钥加 (8)密钥扩展 (8)获取RoundKey (10)逆字节替换 (11)逆行移位 (11)逆列混合 (12)加密 (13)解密 (15)4. 测试报告 (17)5.结论 (19)参考文献 (19)1.背景与意义由于AES应用了,感觉这算法的分组为固定长度的128bit,而密钥却有三种,分别为128,192,256bit,对应三种不同轮数分别为10轮,12轮,14轮。

这就加大了算法实现的难度,加上每轮的4种变换,更加体现了算法的复杂性,所以我采用的AES来实现。

不仅加深了我对密码算法本身的认识,更加巩固了我本来不是很熟悉的C语言。

AES算法采用的不可约多项式是p(x)=(84310),共256个多项余式构成了一个有限域,在这有限域上要用到字节运算和字运算。

随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES[1]。

AES即高级加密标准,作为传统堆成加密算法标准DES的替代者,有美国国家标准与技术研究所于1997年提出征集该算法的公告.1999年3月22日,NIST从15个候选算法中公布了5个候选算法进入第二轮悬着:MARS、RC6、Rijindael、SERPENT和Twofish。

经过三轮的筛选,2000年10月2日,以安全性(稳定的数学基础、没有算法弱点、算法抗密码分析的强度、算法输出的随机性)、性能(必须能再多种平台上一较快的速度实现)、大小(不能占用大量的存储空间和内存)、实现特性(灵活性、硬件和软件适应性、算法的简单性等)为标准而最终选定了两个比利时研究者Vincent Rijmen和Joan Daemen 发明的Rijndael算法,并于2001年正式发布了AES标准。

密码学课程设计信息安全

密码学课程设计信息安全

密码学课程设计信息安全一、教学目标本课程旨在通过学习密码学的基本原理和技术,使学生了解信息安全的重要性,掌握密码学的基本概念、加密算法、解密算法和密码协议,培养学生运用密码学知识分析和解决信息安全问题的能力。

1.了解密码学的基本概念和分类;2.掌握常见的加密算法(如DES、RSA等)和密码协议(如SSL/TLS等);3.了解密码学在信息安全领域的应用。

4.能够使用密码学算法进行数据加密和解密;5.能够分析和评估密码协议的安全性;6.能够运用密码学知识解决实际的信息安全问题。

情感态度价值观目标:1.增强学生对信息安全的意识,认识到密码学在保护信息安全中的重要性;2.培养学生对密码学研究的兴趣,激发学生探索和创新的精神;3.培养学生遵守信息安全法律法规,具有良好的道德品质和职业操守。

二、教学内容本课程的教学内容主要包括密码学的基本概念、加密算法、解密算法和密码协议。

具体安排如下:1.密码学的基本概念:密码学的发展历程、密码体制、加密与解密的基本原理;2.加密算法:对称加密算法(如DES、AES等)、非对称加密算法(如RSA、ECC等);3.解密算法:解密算法的基本原理和实现方法;4.密码协议:SSL/TLS协议、Kerberos协议等;5.密码学在信息安全领域的应用:数字签名、身份认证、数据完整性保护等。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性,提高学生的实践能力。

具体方法如下:1.讲授法:通过讲解密码学的基本概念、原理和算法,使学生掌握密码学的基本知识;2.案例分析法:分析实际的信息安全案例,使学生了解密码学在实际应用中的作用;3.实验法:通过实验操作,让学生亲自体验密码学算法的加密和解密过程,提高学生的实践能力;4.讨论法:学生进行分组讨论,促进学生之间的交流与合作,培养学生的创新思维。

四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。

具体资源如下:1.教材:选用权威、实用的密码学教材,如《密码学导论》、《信息安全密码学》等;2.参考书:提供相关的密码学参考书籍,如《密码学手册》、《现代密码学》等;3.多媒体资料:制作精美的教学PPT,提供相关的视频教程、动画演示等;4.实验设备:配置相应的实验设备,如计算机、网络设备等,以支持实验教学的开展。

实验一 DES加密解密

实验一 DES加密解密实验目的1、理解对称加密算法的原理和特点。

2、理解DES和AES算法的加密原理。

实验原理DES是一种分组加密算法,所谓分组加密算法就是对一定大小的明文或密文来做加密或解密动作。

而在DES这个加密系统中,每次加密或解密的分组大小均为64位,所以DES没有密文扩充的问题。

对大于64位的明文只要按每64位一组进行切割,而对小于64位的明文只要在后面补“0”即可。

另一方面,DES所用的加密或解密密钥也是64位大小,但因其中有8个位是用来作奇偶校验的,所以64位中真正起密钥作用的只有56位,密钥过短也是DES最大的缺点。

DES加密与解密所用的算法除了子密钥的顺序不同外,其他部分完全相同。

核心代码#include <stdlib.h>#include <stdio.h>#include <string.h>#define ENCRYPT 1#define DECRYPT 0static void printHex( char *cmd, int len );static void printArray( const char *In, int len );static void F_func(bool In[32], const bool Ki[48]); // f函数static void S_func(bool Out[32], const bool In[48]); // S盒代替static void Transform(bool *Out, bool *In, const char *Table, int len); // 变换static void Xor(bool *InA, const bool *InB, int len); // 异或static void RotateL(bool *In, int len, int loop); // 循环左移static void ByteToBit(bool *Out, const char *In, int bits); // 字节组转换成位组static void BitToByte(char *Out, const bool *In, int bits); // 位组转换成字节组// 16位子密钥static bool SubKey[16][48];// 64位经过PC1转换为56位(PC-1)const static char PC1_Table[56] ={};// 左移const static char LOOP_Table[16] ={};// 排列选择 2 (PC-2)const static char PC2_Table[48] ={};// Ri_1(32位)经过变换E后膨胀为48位(E) void F_func static const char E_Table[48] ={};// 8个4比特合并为32比特的排列Pconst static char P_Table[32] ={};// 经过S盒S-boxesconst static char S_Box[8][4][16] ={};// 初始排列(IP)const static char IP_Table[64] ={};// L16与R16合并后经过IP_1的最终排列(IP**-1)const static char IPR_Table[64] ={};void Des_SetKey(const char Key[8]); //生成子密钥void Des_Run(char Out[8], char In[8], bool Type); //DES算法void main(int argc, char *argv[]){char key[12]={1,2,3,4,5,6,7,8};char str[12]="Hello";char str2[12];//printArray( PC2_Table, sizeof(PC2_Table)/sizeof(PC2_Table[0]) );printf("Before encrypting: ");puts(str);Des_SetKey(key);memset(str2, 0, sizeof(str2));Des_Run(str2, str, ENCRYPT);printf("After encrypting: ");printHex( str2, 8 );memset(str, 0, sizeof(str));printf("After decrypting: ");Des_Run(str, str2, DECRYPT);puts(str);}实验分析DES采用传统的换位和置换的方法进行加密,在56b密钥的控制下,将64b明文块变换为64b密文块,加密过程包括16轮的加密迭代,每轮都采用一种乘积密码方式(代替和移位)。

aes加密课程设计

aes加密课程设计一、课程目标知识目标:1. 让学生理解AES加密算法的基本概念,掌握其加密过程及原理;2. 使学生了解AES加密算法在我国信息安全领域的应用,认识到数据加密的重要性;3. 引导学生掌握AES加密算法中的密钥生成、轮函数、字节替换等关键环节。

技能目标:1. 培养学生运用编程语言实现AES加密算法的能力;2. 培养学生分析、解决实际加密问题的能力;3. 提高学生团队协作、沟通表达的能力。

情感态度价值观目标:1. 激发学生对密码学领域的兴趣,培养其探索精神;2. 培养学生严谨、认真的学习态度,养成良好的学习习惯;3. 增强学生的信息安全意识,使其具备保护个人隐私和数据的责任感。

课程性质:本课程为信息技术学科,以实践操作为主,注重培养学生的动手能力和实际应用能力。

学生特点:六年级学生具有一定的信息技术基础,对新鲜事物充满好奇,具备一定的编程能力。

教学要求:结合学生特点,采用任务驱动法、分组合作法等教学方法,注重理论与实践相结合,提高学生的综合能力。

在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。

通过本课程的学习,使学生能够独立完成AES加密算法的实现,并具备解决实际加密问题的能力。

二、教学内容1. AES加密算法概述:介绍AES加密算法的发展背景、基本原理和在我国信息安全领域的应用。

- 教材章节:第三章 密码学基础- 内容:AES加密算法的历史、加密过程、密钥生成等。

2. AES加密算法的数学基础:讲解AES加密算法中所涉及的数学知识,如有限域、模运算等。

- 教材章节:第三章 密码学基础- 内容:有限域的定义、性质、模运算规则等。

3. AES加密算法的具体实现:分析AES加密算法的各个步骤,如字节替换、行移位、列混淆、轮密钥加等。

- 教材章节:第四章 AES加密算法- 内容:轮函数的构成、字节替换表、行移位规则、列混淆矩阵等。

4. AES加密算法编程实践:指导学生运用编程语言(如Python)实现AES加密算法。

信息安全学实验报告

一、实验背景随着信息技术的飞速发展,信息安全已经成为国家、企业和个人关注的焦点。

为了提高我们对信息安全知识的理解和实际操作能力,本次实验选取了《信息安全学》课程中的密码学实验,旨在通过实践操作,加深对密码学原理和方法的认识。

二、实验目的1. 理解密码学的基本概念和原理。

2. 掌握常用加密算法(如DES、AES)的使用方法。

3. 学习密码学在实际应用中的安全性分析。

4. 提高信息安全防护意识。

三、实验内容本次实验分为三个部分:DES加密算法、AES加密算法和密码学安全性分析。

1. DES加密算法(1)实验目的:了解DES加密算法的基本原理和实现方法。

(2)实验步骤:a. 创建一个待加密的明文消息。

b. 生成一个DES密钥。

c. 使用DES算法对明文消息进行加密。

d. 将加密后的密文输出。

(3)实验结果:通过实验,我们成功实现了DES加密算法的加密和解密过程,验证了算法的正确性。

2. AES加密算法(1)实验目的:了解AES加密算法的基本原理和实现方法。

(2)实验步骤:a. 创建一个待加密的明文消息。

b. 生成一个AES密钥。

c. 使用AES算法对明文消息进行加密。

d. 将加密后的密文输出。

(3)实验结果:通过实验,我们成功实现了AES加密算法的加密和解密过程,验证了算法的正确性。

3. 密码学安全性分析(1)实验目的:了解密码学在实际应用中的安全性分析。

(2)实验步骤:a. 分析DES和AES加密算法的优缺点。

b. 对加密算法进行安全性评估。

c. 探讨密码学在实际应用中的安全隐患。

(3)实验结果:通过实验,我们了解到DES和AES加密算法在安全性、速度和易用性等方面的优缺点。

同时,我们也认识到密码学在实际应用中存在一定的安全隐患,如密钥泄露、算法破解等。

四、实验总结通过本次实验,我们掌握了DES和AES加密算法的基本原理和实现方法,了解了密码学在实际应用中的安全性分析。

以下是本次实验的收获:1. 加密算法在信息安全领域的重要性。

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算法进行总结,引导学生思考其优点与局限性,介绍其他密码学算法。

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

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

信息安全概论院(系):专业班级:姓名:学号:日期:地点:指导教师:成绩:一、课程设计目标1.通过信息安全课程设计,能够增强我们对信息安全的认识,更加牢固的掌握信息安全概论相关知识。

2.综合运用学习到的理论知识,提高实践能力。

3.通过小组讨论形式对任务进行分解,提出实现方案,制定计划,小组成员分工协作,共同完成课程设计题目,培养团队合作能力。

4.运用熟悉的程序语言编写程序,增强对程序语言的运用。

5.课程设计期间,通过对问题的分析查找资料,培养资料查询以及运用现代信息技术获取相关信息并进行归纳总结的基本能力。

6.与同学讨论,互相学习,提升个人学习能力。

二、课程设计内容1课程设计的内容1.1确定课程设计方向:经过小组成员的商讨,确定了使用c#语言,编写一个对文件进行加密加密的小程序,运用DES算法,实现对文件的加密解密后,再添加一些小的功能,用AES算法,实现对字符串的加密解密。

1.2 查阅资料:通过查找文件加解密的资料以及查阅了相关的加密解密算法,学习了对文件加密解密的基本思路,与实现方法。

1.3界面设程序计:设计一个整体界面,有三个按钮,其中两个分别实现对应文件的加密解密和字符串的加密解密,还有一个退出程序功能按钮。

1.4程序设计:有了思路和方法,接着就借助c#语言分别实现对文件的加密解密,以及对字符串的加密解密小程序。

1.5 后期调试:程序实现后,对其进行调试,发现不合适的地方及时纠正。

1.6完成课程设计:写课程设计报告,完成课程设计。

2原理介绍2.1 DES加密原理DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。

这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。

使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。

DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

本程序中运用DESCryptoServiceProvider类的部分属性或方法,从而达到使用des加密解密的目的。

2.1 RSA加密原理RSA公开密钥密码体制。

所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。

在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。

加密算法E和解密算法D也都是公开的。

虽然秘密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。

正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。

为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。

这就使加密的计算量很大。

为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES 或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。

对方收到信息后,用不同的密钥解密并可核对信息摘要。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。

RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

3开发环境及技术介绍3.1 开发环境:Microsoft Visual Studio 2008Microsoft Visual Studio 2008是面向Windows Vista、Office 2007、Web 2.0的下一代开发工具,代号“Orcas”,是对Visual Studio 2005一次及时、全面的升级。

VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。

使用Visual Studio 2008可以高效开发Windows应用。

设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。

同时Visual Studio 2008支持项目模板、调试器和部署程序。

Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office 应用和Mobile应用。

3.2 引用命名空间以及相关类命名空间:System.IO 命名空间包含允许读写文件和数据流的类型以及提供基本文件和目录支持的类型。

System.Security.Cryptography 命名空间提供加密服务,包括对数据进行安全的编码和解码以及许多其他操作,如散列运算、随机数生成和消息验证等。

相关类:FileStream 类,是公开以文件为主的Stream,既支持同步读写操作,也支持异步读写操作。

CryptoStream的任何加密对象可以和实现Stream 的任何对象链接起来,因此一个对象的流式处理输出可以馈送到另一个对象的输入。

不需要分别存储中间结果(第一个对象的输出)。

DESCryptoServiceProvider类,该类定义访问数据加密标准(DES)算法的加密服务提供程序(CSP)版本的包装对象。

4系统主要函数介绍(代码加上详细注释)4.1 DES对文件加密解密程序的主要函数://产生随机Byte数组用作IV初始向量private static RandomNumberGenerator rand = new RNGCryptoServiceProvider();private byte[] IV = GenerateRandomBytes(16);//产生随机数组private static byte[] GenerateRandomBytes(int count){byte[] bytes = new byte[count];rand.GetBytes(bytes);return bytes;}private void btnSelectFile_Click(object sender, EventArgs e)//选择文件路径{openFileDialog1.FileName = "";if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {txtFileName.Text = openFileDialog1.FileName;}}private void btnEncryptFile_Click(object sender, EventArgs e)//加密事件{string inFile = txtFileName.Text;string outFile = inFile + ".dat";string word = txtPassword.Text + "*******";if (word == "*******"){MessageBox.Show("请输入密码!");return;}string str = word.Substring(0, 8);byte[] password = Encoding.ASCII.GetBytes(str);try{EncryptData(inFile, outFile, password, IV);File.Delete(inFile);//删除加密前的文件txtFileName.Text = string.Empty;MessageBox.Show("加密成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}private void btnDecryptFile_Click(object sender, EventArgs e)//解密事件 {string inFile = txtFileName.Text;string outFile = null;if (inFile.Length != 0)outFile = inFile.Substring(0, inFile.Length - 4);else{MessageBox.Show("空路径名师非法的,请选择文件路径!");return;}string word = txtPassword.Text + "*******";//密码不足八位时,补足八位if (word == "*******"){MessageBox.Show("请输入密码!");return;}string str = word.Substring(0, 8);byte[] password = Encoding.ASCII.GetBytes(str);try{DecryptData(inFile, outFile, password, IV);File.Delete(inFile);//删除解密前的文件txtFileName.Text = string.Empty;MessageBox.Show("解密成功");}catch (Exception ex){File.Delete(outFile);MessageBox.Show(ex.Message);return;}}//DES加密算法private static void EncryptData(String inName, String outName, byte[] desKey, byte[] desIV){//创建文件流处理文件信息FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write); fout.SetLength(0);byte[] bin = new byte[100]; //暂时存储读取的数据long rdlen = 0; //写入到文件中的总长度long totlen = fin.Length; //读取的文件的总长度int len; //一次写入的长度DES des = new DESCryptoServiceProvider();CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV),CryptoStreamMode.Write);//读取传入文件,并将信息加密写入到传出文件中while (rdlen < totlen){len = fin.Read(bin, 0, 100);encStream.Write(bin, 0, len);rdlen = rdlen + len;}encStream.Close();fout.Close();fin.Close();}///解密算法private static void DecryptData(String inName, String outName, byte[] desKey, byte[] desIV) {FileStream fout=null;FileStream fin=null;CryptoStream encStream=null;try{//创建文件流处理文件信息fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);fout.SetLength(0);byte[] bin = new byte[100]; //暂时存储读取的数据long rdlen = 0; //写入到文件中的总长度long totlen = fin.Length; //读取的文件的总长度int len; . //一次写入的长度DES des = new DESCryptoServiceProvider();encStream = new CryptoStream(fout, des.CreateDecryptor(desKey, desIV),CryptoStreamMode.Write);//读取传入文件,并将加密信息写入到传出文件中while (rdlen < totlen){len = fin.Read(bin, 0, 100);encStream.Write(bin, 0, len);rdlen = rdlen + len;}encStream.FlushFinalBlock();}catch{ }finally{fout.Close();fin.Close();encStream.Close();}}4.2 RSA加密解密字符串程序的主要代码:private void buttonEncrypt_Click(object sender, EventArgs e)//点击“加密”{textBoxEncrypted.Text = RSAEncrypt(textBoxInput.Text);}private void buttonDecrypt_Click(object sender, EventArgs e)//点击“解密”{textBoxDecrypted.Text = RSADescrpt(textBoxEncrypted.Text);}//使用RSA算法进行加密private string RSAEncrypt(string text){//从密钥容器中取出密钥提供器RSACryptoServiceProvider rsa = GetRSAProviderFromContainer("rsa1");byte[] bytes = Encoding.Unicode.GetBytes(text);byte[] encryptedData = rsa.Encrypt(bytes, true);//将数据进行加密工作return Convert.ToBase64String(encryptedData);//将加密后的字符数组转换成字符串}//使用RSA算法进行解密private string RSADescrpt(string text){//从密钥容器中取出密钥提供器RSACryptoServiceProvider rsa = GetRSAProviderFromContainer("rsa1");//将要进行解密的字符串转换成字符数组byte[] encryptedData = Convert.FromBase64String(text);//将加密数据encryptedData进行解密并将结果保存到decryptedData中byte[] decryptedData = rsa.Decrypt(encryptedData, true);//将解密后的字符数组转换成字符串return Encoding.Unicode.GetString(decryptedData);}//获取初始化RSA对象private static RSACryptoServiceProvider GetRSAProviderFromContainer(string containerName)//<containerName>密钥容器名{CspParameters cp = new CspParameters();//将 ProviderType初始化为值24,该值指定PROV_RSA_AES提供程序cp.ProviderType = 24;//如果不存在名为containerName的密钥容器,则创建之,并初始化cp//如果存在,则直接根据它保存的内容初始化cpcp.KeyContainerName = containerName;RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);return rsa;}//导出密钥private void buttonExportKey_Click(object sender, EventArgs e){RSACryptoServiceProvider rsa = GetRSAProviderFromContainer("rsa1");string rsaKeyInfo = rsa.ToXmlString(true);System.IO.File.WriteAllText("keyinfo.txt", rsaKeyInfo);MessageBox.Show("密钥信息成功导出到‘keyinfo.txt’中,请妥善保存该文件!"); }//导入密钥private void buttonImprotKey_Click(object sender, EventArgs e){//保存不对称密钥到密钥容器SaveKeyInfoToContainer("rsa1");MessageBox.Show("导入成功!");}//将密钥信息保存到密钥容器中private static void SaveKeyInfoToContainer(string containerName){CspParameters cp = new CspParameters();//将 ProviderType初始化为值24,该值指定PROV_RSA_AES提供程序cp.ProviderType = 24;cp.KeyContainerName = containerName;string rsaKeyInfo = System.IO.File.ReadAllText("keyinfo.txt");RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp); rsa.FromXmlString(rsaKeyInfo);//true表示将密钥永久驻留在csp中,false表示从密钥容器中删除该密钥 rsa.PersistKeyInCsp = true;}5系统运行效果(截图)5.1运行效果图:整体界面:字符串加解密界面:文件加密解密界面:5.2对文件加解密程序进行测试:选择文件对文件进行加密:选择文件,进行解密:解密成功之后,文件可以正常打开显示内容。

相关文档
最新文档