ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:2.18MB ,
资源ID:4568308      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4568308.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据加密解密实训报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据加密解密实训报告.docx

1、数据加密解密实训报告郑州轻工业学院生产实习报告名称: 指导教师:姓名:学号:班级:提交日期:1. 目的数据加密技术是网络中最基本的安全技术,主要是通过对网络中传输的信息进行数据加密来保障其安全性,这是一种主动安全防御策略,用很小的代价即可为信息提供相当大的安全保护。2. 题目使用C#编程语言,实现数据的加密与解密。3. 功能描述系统基本功能描述如下:1、 实现DES算法加密与解密功能。2、 实现TripleDES算法加密与解密功能。3、 实现MD5算法加密功能。4、 实现RC2算法加密与解密功能。5、 实现TripleDES算法加密与解密功能。6、 实现RSA算法加密与解密功能。4. 需求分析

2、4.1 用户需求数据加密是确保计算机网络安全的一种重要机制,虽然由于成本、技术和管理上的复杂性等原因,目前尚未在网络中普及,但数据加密的确是实现分布式系统和网络环境下数据安全的重要手段之一。用户能够通过此项目操作几种类型的加密解密,并能得到正确的结果。4.2 功能需求加密,是一种限制对网络上传输数据的访问权的技术。原始数据(也称为明文,plaintext)被加密设备(硬件或软件)和密钥加密而产生的经过编码的数据称为密文(ciphertext)。将密文还原为原始明文的过程称为解密,它是加密的反向处理,但解密者必须利用相同类型的加密设备和密钥对密文进行解密。加密的基本功能包括:1. 防止不速之客查

3、看机密的数据文件;2. 防止机密数据被泄露或篡改;3. 防止特权用户(如系统管理员)查看私人数据文件;4. 使入侵者不能轻易地查找一个系统的文件。加密类型可以简单地分为四种:1. 根本不考虑解密问题,如:MD5;2. 私用密钥加密技术:对称式加密(Symmetric Key Encryption):对称式加密方式对加密和解密使用相同的密钥。通常,这种加密方式在应用中难以实施,因为用同一种安全方式共享密钥很难。如:RC4、RC2、DES 和 AES 系列加密算法。3. 公开密钥加密技术:非对称密钥加密(Asymmetric Key Encryption):非对称密钥加密使用一组公共/私人密钥系统

4、,加密时使用一种密钥,解密时使用另一种密钥。公共密钥可以广泛的共享和透露。当需要用加密方式向服务器外部传送数据时,这种加密方式更方便。如: RSA4. 数字证书。(Certificate):数字证书是一种非对称密钥加密,但是,一个组织可以使用证书并通过数字签名将一组公钥和私钥与其拥有者相关联。本次要做的项目需要实现前三种加密类型,包括:MD5、DES、TripleDES、RC2、AES、RSA,并为用户提供每个加密方法实现的选择界面和每种加密解密方法的具体操作界面。在此项目中应该定义一个类,包含几种加密解密的算法,供其调用。5. 设计说明根据功能描述可知,建立主界面窗体如下所示:图 1 主窗体

5、界面设置主窗体的IsMdiContainer为True;添加menuStrip控件,并设置其相应菜单属性。5.1 设计加密类根据需求分析,定义Security类用于描述各种加密算法,具体方法是:1、右击“解决方案资源管理器”的项目,新建文件夹“app_code”2、选择“项目”“添加类”,输入类的名称: 图2 添加Security类5.2 各种加密算法5.2.1 MD5加密对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 MD5中四

6、个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476。 当设置好这四个链接变量后,就开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。 将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。 主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向左环移一个不定的数,并加上a、b、

7、c或d中之一。最后用该结果取代a、b、c或d中之一。5.2.2 对称加密之DES和TripleDES加密与解密对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码)。因此,通信双方都必须获得这把钥匙,并保持钥匙的秘密。单钥密码系统的安全性依赖于以下两个因素:第一、加密算法必须是足够强的,仅仅基于密文本身去解密信息在实践上是不可能的。第二、加密方法的安全性依赖于密钥的秘密性,而不是算法的秘密性,因此,我们没有必要确保算法的秘密性(事实上,现实中使用的很多单钥密码系统的算法都是公开的),但是

8、我们一定要保证密钥的秘密性。DES(Data Encryption Standard)和TripleDES是对称加密的两种实现。DES和TripleDES基本算法一致,只是TripleDES算法提供的key位数更多,加密可靠性更高。DES使用的密钥key为8字节,初始向量IV也是8字节。TripleDES使用24字节的key,初始向量IV也是8字节。两种算法都是以8字节为一个块进行加密,一个数据块一个数据块的加密,一个8字节的明文加密后的密文也是8字节。如果明文长度不为8字节的整数倍,添加值为0的字节凑满8字节整数倍。所以加密后的密文长度一定为8字节的整数倍。 图3 Des加密解密过程上图是整

9、个DES和TripleDES算法的加密解密过程,下面以TripleDES为例,结合dotnet分析加密解密的各个步骤,并给出相关实现代码。1、 生成key和IVSystem.Security.Cryptography. TripleDESCryptoServiceProvider类是dotnet中实现TripleDES算法的主要的类。TripleDESCryptoServiceProvider类只有一个构造方法TripleDESCryptoServiceProvider(),这个方法把一些属性初始化:KeySize(加密密钥长度,以位为单位)= 192(24字节)BlockSize(加密处理的

10、数据块大小,以位为单位)= 64(8字节)FeedbackSize(加密数据块后返回的数据大小,以位为单位)= 64(8字节)TripleDESCryptoServiceProvider构造方法同时会初始化一组随机的key和IV。默认的TripleDESCryptoServiceProvider的key为24字节,IV为8字节,加密数据块为8字节。生成key和IV的代码很简单:TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();byte keyArray = tDESalg.Key;byte

11、 IVArray = tDESalg.IV;生成的key和IV在加密过程和解密过程都要使用。2、 字符串明文转成某一代码页对应的编码字节流待加密的数据可能有两种形式,一种是二进制的数据,本身就是一组字节流,这样的数据可以跳过这一步,直接进入加密步骤。还有一种情况是字符串数据,字符串中同样的字符使用不同的代码页会生成不同的字节码,所以从字符串到字节流的转换是需要指定使用何种编码的。在解密之后,要从字节流转换到字符串就要使用相同的代码页解码,否则就会出现乱码。/ 待加密的字符串string plainTextString = Here is some data to encrypt. 这里是一些要

12、加密的数据。;/ 使用utf-8编码(也可以使用其它的编码)Encoding sEncoding = Encoding.GetEncoding(utf-8);/ 把字符串明文转换成utf-8编码的字节流byte plainTextArray = sEncoding.GetBytes(plainTextString);3、 加密操作加密的原料是明文字节流,TripleDES算法对字节流进行加密,返回的是加密后的字节流。同时要给定加密使用的key和IV。/ 把字符串明文转换成utf-8编码的字节流byte plainTextArray = sEncoding.GetBytes(plainTextS

13、tring);public static byte EncryptString(byte plainTextArray, byte Key, byte IV)/ 建立一个MemoryStream,这里面存放加密后的数据流MemoryStream mStream = new MemoryStream();/ 使用MemoryStream 和key、IV新建一个CryptoStream 对象CryptoStream cStream = new CryptoStream(mStream,new TripleDESCryptoServiceProvider().CreateEncryptor(Key,

14、 IV),CryptoStreamMode.Write);/ 将加密后的字节流写入到MemoryStreamcStream.Write(plainTextArray, 0, plainTextArray.Length);/把缓冲区中的最后状态更新到MemoryStream,并清除cStream的缓存区cStream.FlushFinalBlock();/ 把解密后的数据流转成字节流byte ret = mStream.ToArray();/ 关闭两个streams.cStream.Close();mStream.Close();return ret;4、 解密操作解密操作解密上面步骤生成的密文

15、byte,需要使用到加密步骤使用的同一组Key和IV。/ 调用解密方法,返回已解密数据的bytebyte finalPlainTextArray = DecryptTextFromMemory(Data, keyArray, IVArray);public static byte DecryptTextFromMemory(byte EncryptedDataArray, byte Key, byte IV)/ 建立一个MemoryStream,这里面存放加密后的数据流MemoryStream msDecrypt = new MemoryStream(EncryptedDataArray);/

16、 使用MemoryStream 和key、IV新建一个CryptoStream 对象CryptoStream csDecrypt = new CryptoStream(msDecrypt,new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV),CryptoStreamMode.Read);/ 根据密文byte的长度(可能比加密前的明文长),新建一个存放解密后明文的bytebyte DecryptDataArray = new byteEncryptedDataArray.Length;/ 把解密后的数据读入到DecryptDa

17、taArraycsDecrypt.Read(DecryptDataArray, 0, DecryptDataArray.Length);msDecrypt.Close();csDecrypt.Close();return DecryptDataArray;有一点需要注意,DES加密是以数据块为单位加密的,8个字节一个数据块,如果待加密明byte的长度不是8字节的整数倍,算法先用值为“0”的byte补足8个字节,然后进行加密。所以加密后的密文长度一定是8的整数倍。这样的密文解密后如果补了0值的byte,则解密后这些0值的byte依然存在。比如上例中要加密的明文是:“Here is some da

18、ta to encrypt. 这里是一些要加密的数据。”转成明文byte后是66个字节,DES算法就会补上6个0值的byte,补到72个字节。这样加密后再解密回来的密文byte解码后的字符串就是这样的:Here is some data to encrypt. 这里是一些要加密的数据。0000005、 从编码字节流转成字符串明文/ 使用前面定义的Encoding,utf-8的编码把byte转成字符串plainTextString = sEncoding.GetString(finalPlainTextArray);5.2.3 RC2加密与解密RC2是由著名密码学家Ron Rivest设计的一种

19、传统对称分组加密算法,它可作为DES算法的建议替代算法。它的输入和输出都是64比特。密钥的长度是从1字节到128字节可变,但目前的实现是8字节(1998年)。 此算法被设计为可容易地在16位的微处理器上实现。在一个IBM AT机上,RC2加密算法的执行可比DES算法快两倍(假设进行密钥扩展)。5.2.4 AES加密与解密对称密码体制的发展趋势将以分组密码为重点。分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。加密算法由一个密码学上的弱函数f与r个子密钥迭代r次组成。混乱和密钥扩散是分组密码算法设计的基本原则。抵御已知明文的差分和线性攻

20、击,可变长密钥和分组是该体制的设计要点。 AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。 AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。1999年3月完成了第二轮AES2的分析、测试。2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Rijmen 提出的一种密码算法RIJNDAEL 作为 AES. 在应用方面,尽管DES在安全上是脆弱的,但由于快速DES芯片

21、的大量生产,使得DES仍能暂时继续使用,为提高安全强度,通常使用独立密钥的三级DES。但是DES迟早要被AES代替。流密码体制较之分组密码在理论上成熟且安全,但未被列入下一代加密标准。 AES加密数据块和密钥长度可以是128比特、192比特、256比特中的任意一个。AES加密有很多轮的重复和变换。大致步骤如下:1、密钥扩展(KeyExpansion),2、初始轮(Initial Round),3、重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(Final Round),最终轮没有MixColumns。5.2.

22、5 非对称加密之RSA加密和解密的讲解RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐

23、渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)

24、协议中要求CA采用2048bits长的密钥,其他实体使用1024比特的密钥。C)RSA密钥长度随着保密级别提高,增加很快。 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。早在1973年,英国国家通信总局的数学家Clifford Cocks就发现了类似的算法。但是他的发现被列为绝密,直到1998年才公诸于世。RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。RSA的算法

25、涉及三个参数,n、e1、e2。其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod(p-1)*(q-1)=1。(n及e1),(n及e2)就是密钥对。RSA加解密的算法完全相同,设A为明文,B为密文,则:A=Be1 mod n;B=Ae2 mod n;e1和e2可以互换使用,即:A=Be2 mod n;B=Ae1 mod n; 图 4 RSA加密解密过程 C#代码实现需引用using System.Security.Cryptography;/ /

26、RSA加密/ / / / public static string RSAEncrypt(string publickey, string content)publickey = 5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=AQAB;RSACryptoServiceProvider rsa = ne

27、w RSACryptoServiceProvider();byte cipherbytes;rsa.FromXmlString(publickey);cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);return Convert.ToBase64String(cipherbytes);/ / RSA解密/ / / / public static string RSADecrypt(string privatekey, string content)privatekey = 5m9m14XH3oqLJ8bNGw9e

28、4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=AQAB/hf2dnK7rNfl3lbqghWcpFdu778hUpIEBixCDL5WiBtpkZdpSw90aERmHJYaW2RGvGRi6zSftLh00KHsPcNUMw=6Cn/jOLrPapDTEp1Fkq+uz+1Do0eeX7HYqi9rY29CqShzCeI7LEYOoSwY

29、uAJ3xA/DuCdQENPSoJ9KFbO4Wsow=ga1rHIJro8e/yhxjrKYo/nqc5ICQGhrpMNlPkD9n3CjZVPOISkWF7FzUHEzDANeJfkZhcZa21z24aG3rKo5Qnw=MNGsCB8rYlMsRZ2ek2pyQwO7h/sZT8y5ilO9wu08Dwnot/7UMiOEQfDWstY3w5XQQHnvC9WFyCfP4h4QBissyw=EG02S7SADhH1EVT9DD0Z62Y0uY7gIYvxX/uq+IzKSCwB8M2G7Qv9xgZQaQlLpCaeKbux3Y59hHM+KpamGL19Kg=vmaYHEbPAg

30、OJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf+Nr0FeNW1RB1XG30=;RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();byte cipherbytes;rsa.FromXmlString(privatekey);cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);return Encodin

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1