1、5/30/20221计算机网络编程技术计算机网络编程技术第第10章章 网络信息加密传输程序设计网络信息加密传输程序设计5/30/20222网络攻击类型网络攻击类型l网络信息安全网络信息安全: l信息存储安全信息存储安全l信息传输安全信息传输安全5/30/20223本章的主要内容本章的主要内容l数据加密模型数据加密模型l对称加密程序设计对称加密程序设计l非对称加密程序设计非对称加密程序设计l网络信息加密传输程序设计网络信息加密传输程序设计5/30/2022410.1 数据加密模型数据加密模型(1) 数据加密模型描述数据加密模型描述5/30/20225(2) 对称加密模型对称加密模型对称加密算法使
2、用起来简单快捷,密钥较短,且破译困难。对称加密算法使用起来简单快捷,密钥较短,且破译困难。5/30/20226常见的对称加密算法常见的对称加密算法密码算法密码算法作作 者者密钥长度密钥长度说说 明明DESIBM56对于现在使用,太弱了对于现在使用,太弱了IDEAMassey和和Xuejia128好,但是属于专利算法好,但是属于专利算法RC4Ronald Rivest12048小心,有一些弱密钥小心,有一些弱密钥RC5Ronald Rivest128256好,但是属于专利算法好,但是属于专利算法RijndaelDaemen和和Rijmen128256最佳的选择最佳的选择SerpentAnders
3、on,Biham,Knuds128256很强很强三重三重DESIBM168第二最佳选择第二最佳选择TwofishBruce Schneier128256很强,被广泛使用很强,被广泛使用5/30/20227(3) 非对称加密模型非对称加密模型l非对称加密算法研制的最初理念与目标是旨在解决对称加密算非对称加密算法研制的最初理念与目标是旨在解决对称加密算法中密钥的分发问题法中密钥的分发问题.l实际上它不但很好地解决了这个问题,还可利用非对称加密算实际上它不但很好地解决了这个问题,还可利用非对称加密算法来完成对电子信息的数字签名以防止对信息的否认与抵赖;法来完成对电子信息的数字签名以防止对信息的否认与
4、抵赖;同时,还可以利用数字签名较容易地发现攻击者对信息的非法同时,还可以利用数字签名较容易地发现攻击者对信息的非法篡改,以保护数据信息的完整性。篡改,以保护数据信息的完整性。 5/30/20228(4) 数字签名模型数字签名模型数字签名一般采用非对称加密技术(如数字签名一般采用非对称加密技术(如RSA)。 5/30/2022910.2 对称加密程序设计对称加密程序设计10.2.1 对称加密算法对称加密算法lSymmetricAlgorithm类表示所有对称算法的实现都类表示所有对称算法的实现都必须从中继承的抽象基类必须从中继承的抽象基类;l派生了派生了DES、Triple-DES、RC2和和R
5、ijndael等对称加等对称加密算法密算法;l来自于来自于System.Security.Cryptography命名空间。命名空间。 5/30/202210 SymmetricAlgorithm类的主要属性和方法类的主要属性和方法 名名 称称描描 述述BlockSize获取或设置加密操作的块大小获取或设置加密操作的块大小IV获取或设置对称算法的初始化向量获取或设置对称算法的初始化向量Key获取或设置对称算法的密钥获取或设置对称算法的密钥KeySize获取或设置对称算法所用密钥的大小获取或设置对称算法所用密钥的大小Mode获取或设置对称算法的运算模式获取或设置对称算法的运算模式Clear()释
6、放资源释放资源Create()创建用于执行对称算法的加密实例创建用于执行对称算法的加密实例CreateDecryptor()用指定的密钥和初始化向量创建一个对称解密器对象用指定的密钥和初始化向量创建一个对称解密器对象CreateEncryptor()用指定的密钥和初始化向量创建一个对称加密器对象用指定的密钥和初始化向量创建一个对称加密器对象GenerateIV()为对称加密算法生成一个随机的初始化向量(为对称加密算法生成一个随机的初始化向量(IV),并重写),并重写IV属性中所属性中所存储的值存储的值GenerateKey()为对称加密算法生成一个随机密钥(为对称加密算法生成一个随机密钥(Ke
7、y),并重写),并重写Key属性的值属性的值5/30/202211对称算法的实现对称算法的实现:lRijndaelManagedlDESCryptoServiceProviderlRC2CryptoServiceProviderlTripleDESCryptoService Provider5/30/20221210.2.2 基于流的加密解密方法基于流的加密解密方法l由于对称加密往往用于加密大量数据信息,隐藏采用了流由于对称加密往往用于加密大量数据信息,隐藏采用了流式加密方法,以便支持对内存流和文件流等数据的加密和式加密方法,以便支持对内存流和文件流等数据的加密和解密。托管对称加密类与称为解密
8、。托管对称加密类与称为CryptoStream的特殊流类的特殊流类一起使用。一起使用。l可以使用从可以使用从Stream类派生的任何类(包括类派生的任何类(包括FileStream、MemorySteam和和NetworkStream)初始化)初始化CryptoStream类。使用这些类,可以对各种流对象执行类。使用这些类,可以对各种流对象执行对称加密。对称加密。 5/30/202213(1) 加密过程实例加密过程实例: 创建对称加密算法实例:创建对称加密算法实例:cryptoService=new RijndaelManaged();cryptoService.Mode=CipherMode
9、.CBC; /设置为链接模式设置为链接模式 设置初始化参数,包括密钥和初始化向量等。设置初始化参数,包括密钥和初始化向量等。cryptoService.Key=GetLegalKey();/设置密钥设置密钥cryptoService.IV=GetLegalIV();/设置初始向量设置初始向量 创建加密实例:创建加密实例:ICryptoTransform cryptoTransform=cryptoService.CreateEncryptor(); 创建加密流:创建加密流:MemoryStream ms=new MemoryStream();/创建内存流创建内存流CryptoStream cs
10、=new CryptoStream(ms, crytoTransform,CryptoStreamMode.Write); 通过流的写操作实现数据加密:通过流的写操作实现数据加密:cs.Write(plainByte,0,plainByte.Length);cs.FlushFinalBlock();byte cryptoByte=ms.ToArray(); return Convert.ToBase64String(cryptoByte,0,cryptoByte.GetLength(0);5/30/202214(2) 解密过程实例解密过程实例 创建对称加密算法实例:创建对称加密算法实例:cry
11、ptoService=new RijndaelManaged();cryptoService.Mode=CipherMode.CBC; /设置为链接模式设置为链接模式 设置初始化参数,包括密钥和初始化向量等。用户设置方法如下:设置初始化参数,包括密钥和初始化向量等。用户设置方法如下:cryptoService.Key=GetLegalKey();/设置密钥设置密钥cryptoService.IV=GetLegalIV();/设置初始向量设置初始向量 创建解密实例,如:创建解密实例,如:ICryptoTransform cryptoTransform=cryptoService.CreateEn
12、cryptor(); 创建解密流,如:创建解密流,如:MemoryStream ms=new MemoryStream(cryptoByte,0,cryptoByte.Length);/创建内存流创建内存流CryptoStream cs=new CryptoStream(ms, crytoTransform, CryptoStreamMode.Read); 通过解密流进行数据解密:通过解密流进行数据解密:StreamReader sr=new StreamReader(cs);return sr.ReadToEnd();5/30/20221510.2.3 对称加密程序设计示例对称加密程序设计示
13、例(1) 命名空间与重要实例命名空间与重要实例using System.Security.Cryptography;using System.IO;RijndaelManaged rij=new RijndaelManaged(); 5/30/202216(2) 加密函数加密函数if(textBox.Length=8&textBox.Length=8&textBox.Length=12 ) byte key=System.Text.Encoding.Default.GetBytes( textBox ); byte iv=rij.IV; Rijndael crypt=Rijndael.Crea
14、te(); ICryptoTransform transform=crypt.CreateDecryptor(key,iv); /读取加密后的文件读取加密后的文件FileStream fsopen=new FileStream(readfile,FileMode.Open); CryptoStream cs = new CryptoStream( fsopen ,transform ,CryptoStreamMode. Read ); /把解密后的结果写进文件把解密后的结果写进文件FileStream fswrite=new FileStream(writefile,FileMode.Open
15、OrCreate); int length; while(length=cs.ReadByte()!=-1) fswrite.WriteByte(byte)length); fswrite.Close(); cs.Close(); fsopen.Close(); 5/30/20221810.3 非对称加密程序设计非对称加密程序设计lAsymmetricAlgorithm 类表示所有不对称算法的实现都类表示所有不对称算法的实现都必须从中继承的抽象基类,它派生出必须从中继承的抽象基类,它派生出RSA和和DSA两种加两种加密算法,由密算法,由System.Security.Cryptography
16、命名空间提命名空间提供。供。lRSACryptoServiceProvider类是公钥算法的一个实现类,类是公钥算法的一个实现类,通常用于数据的加密;通常用于数据的加密;DSACryptoServiceProvider类是类是数字签名算法的一个实现类。数字签名算法的一个实现类。 5/30/202219(1) RSACryptoServiceProvider类的主要方法类的主要方法 名名 称称描描 述述Clear释放由释放由 AsymmetricAlgorithm 类使用的所有资源(从类使用的所有资源(从AsymmetricAlgorithm继承)继承)Create允许实例化允许实例化 RSA
17、的特定实现(从的特定实现(从RSA继承)继承)Decrypt使用使用 RSA 算法对数据进行解密算法对数据进行解密Encrypt使用使用 RSA 算法对数据进行加密算法对数据进行加密ExportCspBlob导出包含与导出包含与 RSACryptoServiceProvider 对象关联的密钥信息的对象关联的密钥信息的 BlobExportParameters导出导出 RSAParametersFromXmlString通过通过 XML 字符串中的密钥信息初始化字符串中的密钥信息初始化RSA对象(从对象(从RSA继承)继承)ToXmlString创建并返回包含当前创建并返回包含当前RSA对象的
18、密钥的对象的密钥的XML字符串(从字符串(从RSA继承)继承)VerifyData通过将指定的签名数据与为指定数据计算的签名进行比较来验证指定的签名数通过将指定的签名数据与为指定数据计算的签名进行比较来验证指定的签名数据据VerifyHash通过将指定的签名数据与为指定哈希值计算的签名进行比较来验证指定的签名通过将指定的签名数据与为指定哈希值计算的签名进行比较来验证指定的签名数据数据5/30/202220(2) 一个一个RSA加密编程实例加密编程实例 该程序具有该程序具有4个功能:个功能:l首先是获取公钥首先是获取公钥/私钥对,并分别保存成文件;私钥对,并分别保存成文件;l对字符串进行加密和解
19、密;对字符串进行加密和解密;l对文本文件进行加密和解密;对文本文件进行加密和解密;l对其他格式文件进行加密和解密。对其他格式文件进行加密和解密。 5/30/202221密钥产生界面密钥产生界面5/30/202222加密加密/解密字符串示例解密字符串示例l字符串字符串“计算机网络编程代码测试计算机网络编程代码测试”的加密解密效果:的加密解密效果:5/30/202223加密程序部分:加密程序部分:readpublickey=ReadPublicKey();/读取公钥读取公钥crypt=new RSACryptoServiceProvider(); UTF8Encoding enc=new UTF8
20、Encoding(); bytes=enc.GetBytes(textBox1.Text); crypt.FromXmlString(readpublickey); bytes=crypt.Encrypt(bytes,false); string encryttext=enc.GetString(bytes); richtext2.Text=加密结果:加密结果:nn+encryttext+nn+加密结束!加密结束!; 5/30/202224解密程序部分:解密程序部分:readprivatekey=ReadPrivateKey();/读取私钥读取私钥UTF8Encoding enc=new UT
21、F8Encoding(); byte decryptbyte; crypt.FromXmlString (readprivatekey) ; decryptbyte=crypt.Decrypt( bytes,false ); string decrypttext=enc.GetString(decryptbyte); richtext3.Text=解密结果:解密结果:nn + decrypttext + nn + 解密结束!解密结束! ; 5/30/20222510.4 网络信息加密传输程序设计网络信息加密传输程序设计 (1) RSA网络加密传输原理网络加密传输原理 发送方 R SA 公钥 R
22、 SA 密钥对 R SA 私钥 明文 加密 Internet 解密 明文 接收方 5/30/202226(2) 混合加密技术用于网络传输的工作原理混合加密技术用于网络传输的工作原理 l混合背景:非对称加密算法的计算时间长,对于网络传输信息的实时混合背景:非对称加密算法的计算时间长,对于网络传输信息的实时性有很大影响,所以多用于秘密的加密处理。而对称加密算法的运算性有很大影响,所以多用于秘密的加密处理。而对称加密算法的运算效率高,适用于实际信息的加密。效率高,适用于实际信息的加密。 发送方 接收方 R SA 公钥 A ES 密钥 加密 明文 加密 发送密文 R SA 密钥对 R SA 私钥 解密
23、 解密后 AES 密钥 接收密文 解密 明文 Internet 5/30/202227(3) 服务器的实现:服务器的实现:P274-2815/30/202228(4) 客户机的实现:客户机的实现:P281-2875/30/202229本章小结本章小结l.NET开发环境提供了一系列加密算法,编程简便;而且开发环境提供了一系列加密算法,编程简便;而且适用范围广,在数字信封、数字签名等网络信息传输方面适用范围广,在数字信封、数字签名等网络信息传输方面都可以得到应用。都可以得到应用。l在实用上看,混合加密技术非常适合于网络通信领域,在在实用上看,混合加密技术非常适合于网络通信领域,在网络聊天内容的安全
24、控制中起着重要的作用。网络聊天内容的安全控制中起着重要的作用。 5/30/202230实验项目实验项目1画出画出混合加密网络传输程序混合加密网络传输程序的流程图,并调试程序。的流程图,并调试程序。2设计一个设计一个数字签名程序数字签名程序,并实现其功能。,并实现其功能。3从从网页保护网页保护的角度,采用报文摘要和非对称加密算法的角度,采用报文摘要和非对称加密算法计算选定网页的计算选定网页的HASH值,获得该网页的唯一性,并存值,获得该网页的唯一性,并存储在数据库中,为今后网页自动比对提供必要手段。请储在数据库中,为今后网页自动比对提供必要手段。请给出设计流程,并完成一个简单原型。给出设计流程,并完成一个简单原型。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。