C#网络编程---第11章密码术与网络编程.ppt
《C#网络编程---第11章密码术与网络编程.ppt》由会员分享,可在线阅读,更多相关《C#网络编程---第11章密码术与网络编程.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 1C#C#网络编程技术教程网络编程技术教程第十一章 密码术与网络编程 第第1 11 1章章 密密码码术术与与网网络络编编程程2 2学习目标学习目标了解密码术的基本概念。了解密码术的基本概念。熟悉目前常用的两种加密技术:对称加密、非对熟悉目前常用的两种加密技术:对称加密、非对称加密。称加密。熟悉数字信封和数字签名技术。熟悉数字信封和数字签名技术。掌握掌握.NET.NET中散列算法、对称加密算法和非对称中散列算法、对称加密算法和非对称加密算法的编程方法。加密算法的编程方法。第第1 11 1章章 密密码码术术与与网网络络编编程程3 3本章内容本章内容11.1 11.1 密码术概述密码术概述 11
2、.2 .NET11.2 .NET密码术编程基础密码术编程基础 11.3 11.3 综综 合合 实实 例例 第第1 11 1章章 密密码码术术与与网网络络编编程程4 411.1 11.1 密码术概述密码术概述 图11.1 加密与解密示意图11.1密码术概述 计算机网络的广泛应用对社会经济、科学研究、文化的发展产生了重大的影响,同时也不可避免地会带来一些新的社会、道德、政治和法律问题。目前,网络安全问题已经成为信息化社会的一个焦点问题。计算机网络为信息的获取、传输、处理、利用与共享提供了一个高效、快捷、安全的通信环境和传输通道。网络安全技术从根本上来说就是通过解决网络中存在的安全问题来达到确保信息
3、在网络环境中的存储、处理和传输安全的目的。其中网络信息安全是网络安全技术中的主要研究内容之一,它主要包括两个方面的内容:信息存储安全和信息传输安全。信息存储安全是指如何确保静态存储在联网计算机中的信息不会被未授权的网络用户非法使用,而信息传输安全是指如何保证信息在网络传输的过程中不被泄露与不被攻击。保证网络中信息安全的主要技术是数据的加密与解密。在密码学中,将源信息称为明文;对明文进行某种变换后生成的隐藏了其真实内容的信息称为密文;将明文变换为密文的过程称为加密;将密文经过逆变换恢复成明文的过程称为解密。图11.1给出了一个加密与解密过程的示意图。第第1 11 1章章 密密码码术术与与网网络络
4、编编程程5 511.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计算后的结果。通常,加密算法可以公开,而密钥只能由通信双方来管理。如果在网络传输过程中,传输的是经过加密的信息,那么即使有人窃取了这样的信息,由于其不知道解密密钥,也很难将密文还原成明文,从而可以保证信息在传输与存储中的安全。对于同
5、一种加密算法,密钥的位数越长,破译的困难就越大,安全性也就越好。但是密钥越长,进行加密和解密过程所需要的计算时间也将越长。因此,密钥的长度往往根据应用的实际需要来确定。第第1 11 1章章 密密码码术术与与网网络络编编程程6 611.1 11.1 密码术概述密码术概述 11.1.2对称加密算法根据加密和解密过程中所使用的密钥是否相同可以将加密算法分为对称加密算法和非对称加密算法。对称加密算法是指对信息的加密和解密都使用相同的密钥,因此也称为密钥密码算法,其工作原理如图11.2所示。由于通信双方加密和解密使用同一个密钥,如果第三方获取该密钥就有可能造成失密。因此,如何确保密钥的安全便成了对称加密
6、算法的主要问题。即使设计了一个很好的加密算法,但是密钥管理问题处理不好,那么这样的系统同样是不安全的。在对称加密算法中,如果一个用户A要与N个其他的用户进行加密通信,每个用户都将对应一把密钥,即用户A需要维护N把密钥;如果网络中有N个用户之间进行加密通信时,则每个用户都将需要维护N(N1)个密钥。对称加密算法的加密强度与密钥长度对应。密钥越长,通过蛮力成功攻击的难度越大。当然,对称密钥越长,加解密时间也越长。对称加密运行速度比非对称加密要快得多,处理大量数据时最好使用对称加密。目前,典型的对称加密算法主要包括DES算法、Triple-DES算法、RC2、RC4、RC5算法和Rijndael算法
7、等。图11.2 对称加密算法工作原理第第1 11 1章章 密密码码术术与与网网络络编编程程7 711.1 11.1 密码术概述密码术概述 11.1.3非对称加密算法非对称加密算法对信息的加密与解密使用不同的密钥,用来加密的密钥是可以公开的,用来解密的密钥需要保密。因此又被称为公钥加密算法。其工作原理如图11.3所示。在非对称加密算法中,加密的密钥通常是公开的,谁都可以使用,称其为公钥;解密的密钥只有解密人自己知道,称其为私钥。由于采用了两个密钥,大大简化了密钥的管理,网络中N个用户之间进行加密通信时,仅仅需要使用N对密钥就可以。但是与对称加密算法相比,非对称加密算法复杂、加密和解密的速度比较慢
8、。目前,典型的非对称加密算法主要包括RSA算法和DSA算法等。图11.3 非对称加密的工作原理第第1 11 1章章 密密码码术术与与网网络络编编程程8 811.1 11.1 密码术概述密码术概述 11.1.4数字信封技术对称加密算法运行效率高,但是密钥不适合在网络上传递;而非对称加密算法的密钥传递简单,但运行效率较低。数字信封技术则通过将对称加密算法和非对称加密算法结合起来,充分利用对称加密算法的高效性和非对称加密算法的灵活性,以保证信息在传输过程中的安全性。在数字信封技术中,加密过程主要包括两个步骤,即首先使用对称加密算法对明文进行加密,然后利用非对称加密算法对对称密钥进行加密,并一起将加密
9、结果发往接收方。同样,其解密过程也可以分为两个主要步骤:首先利用非对称解密算法对对称密钥密文进行解密获取对称密钥,然后用所获取的对称密钥对密文进行解密恢复成明文。整个工作原理如图11.4所示。图11.4 数字信封的工作原理第第1 11 1章章 密密码码术术与与网网络络编编程程9 911.1 11.1 密码术概述密码术概述 11.1.5数字签名技术数据加密虽然可以防止信息在传输过程中遇到的若干问题,但是没办法确定发送人的身份,也不能解决信息被篡改和假冒。于是,数字签名技术结合散列算法和非对称加密技术来进行篡改检测和解决相关的身份验证问题。这就像在现实生活中用亲笔签名来保证文件或资料的真实性一样。
10、数字签名将信息发送人的身份与信息传送结合起来,可以保证信息在传输过程中的完整性,并提供信息发送者的身份认证,以防止信息发送者抵赖行为的发生。其实现原理如下:数字签名使用非对称加密算法,例如RSA,并且使用私钥加密,公钥解密的方法实现数字签名。同时考虑到非对称加密算法对加密信息块的长度有一定限制,在进行数字签名之前利用单向散列函数对要签名的信息进行散列计算以获取信息摘要,然后仅对信息摘要签名,如图11.5所示。图11.5 数字签名的工作示意图第第1 11 1章章 密密码码术术与与网网络络编编程程101011.2 .NET11.2 .NET密码术编程基础密码术编程基础 .NET框架的System.
11、Security.Cryptography命名空间提供了对各种加密服务的编程访问,包括安全的数据加密与解密、确保数据的完整性,以及处理数字签名和证书等。System.Security.Cryptography中的核心加密类分为三层,如图11.6所示。第一层是一组抽象类,用于表示加密算法的类型,主要包括散列算法类HashAlgorithm、对称加密类SymmetricAlgorithm和非对称加密类AsymmetricAlgorithm;第二层表示特定加密算法类,虽然是由相应的加密基类派生而来,但它们也是抽象类,例如System.Security.Cryptography.DES;第三层是一组具
12、体的加密实现方案类,每种实现类都由算法类派生而来,例如System.Security.Cryptography.DESCryptoServiceProvider等。这样,每种特定算法类可以派生多个实现类,甚至允许第三方创建其他更好的实现方案类。图11.6 核心加密类的层次结构第第1 11 1章章 密密码码术术与与网网络络编编程程111111.2 .NET11.2 .NET密码术编程基础密码术编程基础 11.2.1.NET中的散列算法及编程散列函数是现代密码系统的基础。这些函数将任意长度的二进制字符串映射为固定长度的二进制字符串(称为散列值)。加密散列函数有这样一个属性:在计算时不可能将两个不同
13、的输入通过散列算法获取相同的值。散列函数通常用于数字签名和保持数据完整性等。在System.Security.Cryptography命名空间中,所有的散列算法类都继承自HashAlgorithm抽象类。HashAlgorithm类提供了一些可以在所有的散列算法中使用的公共方法和属性,其主要方法和属性分别如表11.1和表11.2所示。表11.1HashAlgorithm类的主要属性Hash 获取计算所得的字节数组形式的散列值HashSize 获取计算所得的散列的大小(以位为单位)InputBlockSize 获取输入块的大小OutputBlockSize 获取输出块的大小表11.2 HashA
14、lgorithm类的主要方法Clear 释放由HashAlgorithm 类使用的所有资源ComputeHash 计算输入数据的散列值Create 创建HashAlgorithm类的实现的实例Initialize 初始化HashAlgorithm类的实现TransformBlock 为给定某个范围的输入字节数组计算散列值,并将结果复制到另一个字节数组TransformFinalBlock 为某个给定的范围计算散列值并返回一个字节数组第第1 11 1章章 密密码码术术与与网网络络编编程程121211.2 .NET11.2 .NET密码术编程基础密码术编程基础 11.2.1.NET中的散列算法及编
15、程在HashAlgorithm类的基础上,.NET框架中实现了若干众所周知的、可靠的散列算法,具体算法名称和实现类如表11.3所示。散列算法类的使用非常简单,只要创建一个散列算法类的实例,然后将字节数组数据传入该实例的ComputeHash方法,则该方法将返回计算所得的散列值。下面通过一个通用的散列类Hash来具体说明,其类实现如代码实例11.1所示。该类将根据指定的散列算法简单名称创建相应的散列算法实例,在此基础上将字符串数据传入Encrypt函数,便可以得到其散列值。该方法可以用于对口令的加密存储。由于ComputeHash方法的参数是字节数组,因此程序中引入了ASCIIEncoding.
16、ASCII.GetBytes方法来将字符串转换为字节数组,同时引入Convert.ToBase64String方法将字节数组转换为字符串。简单名称算法实现类描述SHA SHA1CryptoServiceProvider 计算输入数据的SHA1散列值,160位SHA1 SHA1CryptoServiceProvider 计算输入数据的SHA1散列值,160位MD5 MD5CryptoServiceProvider 计算输入数据的MD5散列值,128位SHA256 SHA256Managed 计算输入数据的256散列值,256位SHA-256 SHA256Managed 计算输入数据的256散列值
17、,256位SHA384 SHA384Managed 计算输入数据的SHA384散列值,384位SHA-384 SHA384Managed 计算输入数据的SHA384散列值,384位SHA512 SHA512Managed 计算输入数据的SHA512散列值,512位SHA-512 SHA512Managed 计算输入数据的SHA512散列值,512位第第1 11 1章章 密密码码术术与与网网络络编编程程131311.2 .NET11.2 .NET密码术编程基础密码术编程基础 11.2.1.NET中的散列算法及编程代码实例11.1散列算法实例usingSystem;usingSystem.Coll
18、ections.Generic;usingSystem.Text;usingSystem.Security.Cryptography;namespaceEx_11_1/散列函数类publicclassHashprivateHashAlgorithmmCryptoService=null;/构造函数重载publicHash()mCryptoService=newSHA1Managed();publicHash(stringserviceProviderName)/根据算法名称创建散列对象mCryptoService=(HashAlgorithm)CryptoConfig.CreateFromNa
19、me(serviceProviderName.ToUpper();publicvirtualstringEncrypt(stringplainText)/加密bytecryptoByte=mCryptoService.ComputeHash(ASCIIEncoding.ASCII.GetBytes(plainText);returnConvert.ToBase64String(cryptoByte,0,cryptoByte.Length);第第1 11 1章章 密密码码术术与与网网络络编编程程141411.2 .NET11.2 .NET密码术编程基础密码术编程基础 11.2.1.NET中的散列
20、算法及编程代码实例11.1散列算法实例classProgram/测试类staticvoidMain(stringargs)stringm_ServiceProviderName=,m_Txt=;boolrt=false;Hashm_Hash=null;/从命令行参数提取散列算法名和需要加密的字符串if(args.Length2)Console.WriteLine(Usage:Hash散列算法名加密字符串);elsem_ServiceProviderName=args0.ToString();m_Txt=args1.ToString();rt=true;if(rt)/加密m_Hash=newHa
21、sh(m_ServiceProviderName);if(m_Hash!=null)Console.WriteLine(加密数据:0,m_Hash.Encrypt(m_Txt);elseConsole.WriteLine(参数错误,加密失败!);第第1 11 1章章 密密码码术术与与网网络络编编程程151511.2 .NET11.2 .NET密码术编程基础密码术编程基础 11.2.2.NET中的对称加密算法及编程System.Security.Cryptography命名空间支持DES、Triple-DES、RC2和Rijndael等对称加密算法。这些算法类都是从抽象基类SymmetricAl
22、gorithm派生而来。SymmetricAlgorithm类提供了一些对称加密算法的公用方法和属性,其主要公用方法和属性分别如表11.4和表11.5所示。表11.4 SymmetricAlgorithm类的主要属性属性描述BlockSize 获取或设置加密操作的块大小(以位为单位)FeedbackSize 获取或设置加密操作的反馈大小(以位为单位)IV 获取或设置对称算法的初始化向量(IV)Key 获取或设置对称算法的密钥KeySize 获取或设置对称算法所用密钥的大小(以位为单位)LegalBlockSizes 获取对称算法支持的块大小(以位为单位)LegalKeySizes 获取对称算法
23、支持的密钥大小(以位为单位)Mode 获取或设置对称算法的运算模式Padding 获取或设置对称算法中使用的填充模式表11.5 SymmetricAlgorithm类的主要方法方法描述Clear 释放由SymmetricAlgorithm类使用的所有资源Create 创建用于执行对称算法的加密实例CreateDecryptor 用指定的密钥和初始化向量创建一个对称解密器对象CreateEncryptor 用指定的密钥和初始化向量创建一个对称加密器对象GenerateIV 为对称加密算法生成一个随机的初始化向量(IV),并重写IV属性中所存储的值GenerateKey 为对称加密算法生成一个随机
24、密钥(Key),并重写Key属性的值ValidKeySize 确定指定的密钥大小对当前算法是否有效第第1 11 1章章 密密码码术术与与网网络络编编程程161611.2 .NET11.2 .NET密码术编程基础密码术编程基础 11.2.2.NET中的对称加密算法及编程在SymmetricAlgorithm类的基础上,System.Security.Cryptography命名空间给出了抽象算法实现类DES、RC2、TripleDES和Rijndael,并在此基础上给出了具体加密方案实现类。具体如表11.6所示。表11.6对称加密算法实现类列表简单名称算法实现类DES DESCryptoServ
25、iceProvider 3DES TripleDESCryptoServiceProvider TripleDES TripleDESCryptoServiceProvider RC2 RC2CryptoServiceProvider Rijndael RijndaelManaged 第第1 11 1章章 密密码码术术与与网网络络编编程程171711.2 .NET11.2 .NET密码术编程基础密码术编程基础 11.2.2.NET中的对称加密算法及编程上述对称加密算法实现类使用一种称为密码块链接(CipherBlockChaining,CBC)的链接模式,该模式需要密钥(Key)和初始化向量(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 网络 编程 11 密码
限制150内