C#网络编程技术教程 教学课件 ppt 作者 金华 华进 第11章

上传人:E**** 文档编号:89345140 上传时间:2019-05-23 格式:PPT 页数:49 大小:949KB
返回 下载 相关 举报
C#网络编程技术教程 教学课件 ppt 作者  金华 华进 第11章_第1页
第1页 / 共49页
C#网络编程技术教程 教学课件 ppt 作者  金华 华进 第11章_第2页
第2页 / 共49页
C#网络编程技术教程 教学课件 ppt 作者  金华 华进 第11章_第3页
第3页 / 共49页
C#网络编程技术教程 教学课件 ppt 作者  金华 华进 第11章_第4页
第4页 / 共49页
C#网络编程技术教程 教学课件 ppt 作者  金华 华进 第11章_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《C#网络编程技术教程 教学课件 ppt 作者 金华 华进 第11章》由会员分享,可在线阅读,更多相关《C#网络编程技术教程 教学课件 ppt 作者 金华 华进 第11章(49页珍藏版)》请在金锄头文库上搜索。

1、C#网络编程技术教程,第十一章 密码术与网络编程,学习目标,了解密码术的基本概念。 熟悉目前常用的两种加密技术:对称加密、非对称加密。 熟悉数字信封和数字签名技术。 掌握.NET中散列算法、对称加密算法和非对称加密算法的编程方法。,本章内容,11.1 密码术概述 11.2 .NET密码术编程基础 11.3 综 合 实 例,11.1 密码术概述,图11.1 加密与解密示意图,11.1 密码术概述 计算机网络的广泛应用对社会经济、科学研究、文化的发展产生了重大的影响,同时也不可避免地会带来一些新的社会、道德、政治和法律问题。目前,网络安全问题已经成为信息化社会的一个焦点问题。计算机网络为信息的获取

2、、传输、处理、利用与共享提供了一个高效、快捷、安全的通信环境和传输通道。网络安全技术从根本上来说就是通过解决网络中存在的安全问题来达到确保信息在网络环境中的存储、处理和传输安全的目的。其中网络信息安全是网络安全技术中的主要研究内容之一,它主要包括两个方面的内容:信息存储安全和信息传输安全。 信息存储安全是指如何确保静态存储在联网计算机中的信息不会被未授权的网络用户非法使用,而信息传输安全是指如何保证信息在网络传输的过程中不被泄露与不被攻击。 保证网络中信息安全的主要技术是数据的加密与解密。在密码学中,将源信息称为明文;对明文进行某种变换后生成的隐藏了其真实内容的信息称为密文;将明文变换为密文的

3、过程称为加密;将密文经过逆变换恢复成明文的过程称为解密。图11.1给出了一个加密与解密过程的示意图。,11.1 密码术概述,其中加密和解密操作通常都是在一组密钥控制下进行的,因此加密过程可表示为式11.1,而解密过程可表示为式(11.2)。 c=Eke(m) (11.1) m=Dkd(c) (11.2) m代表明文,c代表密文,E是加密算法,D是解密算法,参数ke称为加密密钥,参数kd称为解密密钥。密文c是明文m使用加密密钥ke经过加密算法E计算后的结果。 通常,加密算法可以公开,而密钥只能由通信双方来管理。如果在网络传输过程中,传输的是经过加密的信息,那么即使有人窃取了这样的信息,由于其不知

4、道解密密钥,也很难将密文还原成明文,从而可以保证信息在传输与存储中的安全。 对于同一种加密算法,密钥的位数越长,破译的困难就越大,安全性也就越好。但是密钥越长,进行加密和解密过程所需要的计算时间也将越长。因此,密钥的长度往往根据应用的实际需要来确定。,11.1 密码术概述,11.1.2 对称加密算法 根据加密和解密过程中所使用的密钥是否相同可以将加密算法分为对称加密算法和非对称加密算法。对称加密算法是指对信息的加密和解密都使用相同的密钥,因此也称为密钥密码算法,其工作原理如图11.2所示。 由于通信双方加密和解密使用同一个密钥,如果第三方获取该密钥就有可能造成失密。因此,如何确保密钥的安全便成

5、了对称加密算法的主要问题。即使设计了一个很好的加密算法,但是密钥管理问题处理不好,那么这样的系统同样是不安全的。 在对称加密算法中,如果一个用户A要与N个其他的用户进行加密通信,每个用户都将对应一把密钥,即用户A需要维护N把密钥;如果网络中有N个用户之间进行加密通信时,则每个用户都将需要维护N(N1)个密钥。 对称加密算法的加密强度与密钥长度对应。密钥越长,通过蛮力成功攻击的难度越大。当然,对称密钥越长,加解密时间也越长。对称加密运行速度比非对称加密要快得多,处理大量数据时最好使用对称加密。 目前,典型的对称加密算法主要包括DES算法、Triple-DES算法、RC2、RC4、RC5算法和Ri

6、jndael算法等。,图11.2 对称加密算法工作原理,11.1 密码术概述,11.1.3 非对称加密算法 非对称加密算法对信息的加密与解密使用不同的密钥,用来加密的密钥是可以公开的,用来解密的密钥需要保密。因此又被称为公钥加密算法。其工作原理如图11.3所示。 在非对称加密算法中,加密的密钥通常是公开的,谁都可以使用,称其为公钥;解密的密钥只有解密人自己知道,称其为私钥。由于采用了两个密钥,大大简化了密钥的管理,网络中N个用户之间进行加密通信时,仅仅需要使用N对密钥就可以。但是与对称加密算法相比,非对称加密算法复杂、加密和解密的速度比较慢。 目前,典型的非对称加密算法主要包括RSA算法和DS

7、A算法等。,图11.3 非对称加密的工作原理,11.1 密码术概述,11.1.4 数字信封技术 对称加密算法运行效率高,但是密钥不适合在网络上传递;而非对称加密算法的密钥传递简单,但运行效率较低。数字信封技术则通过将对称加密算法和非对称加密算法结合起来,充分利用对称加密算法的高效性和非对称加密算法的灵活性,以保证信息在传输过程中的安全性。 在数字信封技术中,加密过程主要包括两个步骤,即首先使用对称加密算法对明文进行加密,然后利用非对称加密算法对对称密钥进行加密,并一起将加密结果发往接收方。同样,其解密过程也可以分为两个主要步骤:首先利用非对称解密算法对对称密钥密文进行解密获取对称密钥,然后用所

8、获取的对称密钥对密文进行解密恢复成明文。整个工作原理如图11.4所示。,图11.4 数字信封的工作原理,11.1 密码术概述,11.1.5 数字签名技术 数据加密虽然可以防止信息在传输过程中遇到的若干问题,但是没办法确定发送人的身份,也不能解决信息被篡改和假冒。于是,数字签名技术结合散列算法和非对称加密技术来进行篡改检测和解决相关的身份验证问题。这就像在现实生活中用亲笔签名来保证文件或资料的真实性一样。 数字签名将信息发送人的身份与信息传送结合起来,可以保证信息在传输过程中的完整性,并提供信息发送者的身份认证,以防止信息发送者抵赖行为的发生。其实现原理如下: 数字签名使用非对称加密算法,例如R

9、SA,并且使用私钥加密,公钥解密的方法实现数字签名。同时考虑到非对称加密算法对加密信息块的长度有一定限制,在进行数字签名之前利用单向散列函数对要签名的信息进行散列计算以获取信息摘要,然后仅对信息摘要签名,如图11.5所示。,图11.5 数字签名的工作示意图,11.2 .NET密码术编程基础,.NET框架的System.Security.Cryptography 命名空间提供了对各种加密服务的编程访问,包括安全的数据加密与解密、确保数据的完整性,以及处理数字签名和证书等。System.Security.Cryptography中的核心加密类分为三层,如图11.6所示。第一层是一组抽象类,用于表示

10、加密算法的类型,主要包括散列算法类HashAlgorithm、对称加密类SymmetricAlgorithm和非对称加密类AsymmetricAlgorithm;第二层表示特定加密算法类,虽然是由相应的加密基类派生而来,但它们也是抽象类,例如System.Security.Cryptography.DES;第三层是一组具体的加密实现方案类,每种实现类都由算法类派生而来,例如System.Security.Cryptography.DESCryptoServiceProvider等。这样,每种特定算法类可以派生多个实现类,甚至允许第三方创建其他更好的实现方案类。,图11.6 核心加密类的层次结构

11、,11.2 .NET密码术编程基础,11.2.1 .NET中的散列算法及编程 散列函数是现代密码系统的基础。这些函数将任意长度的二进制字符串映射为固定长度的二进制字符串(称为散列值)。加密散列函数有这样一个属性:在计算时不可能将两个不同的输入通过散列算法获取相同的值。散列函数通常用于数字签名和保持数据完整性等。 在System.Security.Cryptography 命名空间中,所有的散列算法类都继承自HashAlgorithm抽象类。HashAlgorithm类提供了一些可以在所有的散列算法中使用的公共方法和属性,其主要方法和属性分别如表11.1和表11.2所示。,表11.1 HashA

12、lgorithm类的主要属性,表11.2 HashAlgorithm类的主要方法,11.2 .NET密码术编程基础,11.2.1 .NET中的散列算法及编程 在HashAlgorithm类的基础上,.NET框架中实现了若干众所周知的、可靠的散列算法,具体算法名称和实现类如表11.3所示。 散列算法类的使用非常简单,只要创建一个散列算法类的实例,然后将字节数组数据传入该实例的ComputeHash方法,则该方法将返回计算所得的散列值。下面通过一个通用的散列类Hash来具体说明,其类实现如代码实例11.1所示。该类将根据指定的散列算法简单名称创建相应的散列算法实例,在此基础上将字符串数据传入Enc

13、rypt函数,便可以得到其散列值。该方法可以用于对口令的加密存储。由于ComputeHash方法的参数是字节数组,因此程序中引入了ASCIIEncoding. ASCII.GetBytes方法来将字符串转换为字节数组,同时引入Convert.ToBase64String方法将字节数组转换为字符串。,11.2 .NET密码术编程基础,11.2.1 .NET中的散列算法及编程 代码实例11.1 散列算法实例 using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptog

14、raphy; namespace Ex_11_1 /散列函数类 public class Hash private HashAlgorithm mCryptoService=null; /构造函数重载 public Hash( ) mCryptoService = new SHA1Managed( ); public Hash(string serviceProviderName) /根据算法名称创建散列对象 mCryptoService = (HashAlgorithm)CryptoConfig.CreateFromName(serviceProviderName.To Upper( );

15、public virtual string Encrypt(string plainText) /加密 byte cryptoByte = mCryptoService.ComputeHash(ASCIIEncoding.ASCII.GetBytes(plainText); return Convert.ToBase64String(cryptoByte, 0, cryptoByte.Length); ,11.2 .NET密码术编程基础,11.2.1 .NET中的散列算法及编程 代码实例11.1 散列算法实例 class Program /测试类 static void Main(string

16、 args) string m_ServiceProviderName=“, m_Txt=“; bool rt = false; Hash m_Hash = null; /从命令行参数提取散列算法名和需要加密的字符串 if (args.Length 2) Console.WriteLine(“Usage: Hash 散列算法名 加密字符串“); else m_ServiceProviderName = args0.ToString( ); m_Txt = args1.ToString( ); rt = true; if (rt) /加密 m_Hash = new Hash(m_ServiceProviderName); if (m_Hash != null) Console.WriteLine(“加密数据:0“, m_Hash.Encrypt(m_Txt);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号