网络与通信程序设计(C#)全套教学课件_第1页
网络与通信程序设计(C#)全套教学课件_第2页
网络与通信程序设计(C#)全套教学课件_第3页
网络与通信程序设计(C#)全套教学课件_第4页
网络与通信程序设计(C#)全套教学课件_第5页
已阅读5页,还剩229页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网络与通信程序设计(C#)第一章 .NET平台及C#简介.NET平台 .NET是微软公司推出的一个全新概念的技术,它代表了一个集合、一个环境和一个可以作为平台支持下一代Internet的可编程结构。计算机与程序语言1957前,插拔、开关、纸带、机器语言、汇编1957,IBM,FORTRAN,科学与工程计算1969,汤普森,Unix;里奇,为Unix开发出C1970,阿伦凯,Smalltalk语言,一切皆对象(万能细胞)1975,微软商化M.BASIC,发家1983,C+面世,”带类的C”,适用于编写大型程序1985,Windows投放市场,1991年成为赢家,推出VB1992,高斯林,Oak语

2、言,在C+基础上吸收Smalltalk思想1995,高斯林,Oak改名为Java,互联网编程(跨系统,跨平台)2001,微软输掉Java官司,推出C#C的一家CSmalltalkC+JavaC#C#语言简介 C#的背景:从C和C+演变而来的,结合了C/C+的强大功能、Java的面向对象特性和Visual Basic的易用性,从而成为一种简单的类型安全、面向对象的编程语言,是.NET公共语言运行环境的内置语言。C#的特点:语法简洁面向对象设计与Web紧密结合完整的安全性和错误处理版本控制兼容性,灵活性 C#与C+的比较编译目标:C+代码直接编译为本地可执行代码,C#默认编译为中间语言(IL)代码

3、,执行时再通过Just-In-Time将需要的模块临时编译成本地代码。内存管理:C+需要显式地删除动态分配给堆的内存,而C#不需要这么做,C#采用垃圾回收机制自动在合适的时机回收不再使用的内存。指针:C+中大量地使用指针,而C#使用对类实例的引用,如果确实想在C#中使用指针,必须声明该内容是非安全的。字符串处理:在C#中,字符串是作为一种基本数据类型来对待的,因此比C+中对字符串的处理要简单得多。库:C+依赖于以继承和模板为基础的标准库,C#则依赖于.NET基库。类继承:C+允许类的多继承,而C#只允许类的单继承,通过接口才能实现多继承。 C#和Java的比较C#与Java的相同之处。两者都编

4、译成跨平台的、跨语言的代码,并且代码只能在一个受控制的环境中运行。自动收集垃圾内存,并且取消了指针。在C#中可以使用指针,不过必须注明unsafe关键字。都不需要头文件,所有的代码都被“包(package)”限制在某个范围内,并且因为没有头文件,所以消除了类定义的循环依赖。C#与Java的区别C#面向对象的程度比Java高。C#具有比Java更强大的功能。C#的速度比Java快。Visual Studio 2008 集成开发环境Visual Studio 2013 集成开发环境Visual C# 的应用程序类型控制台应用程序WinForm,Windows窗体应用程序Windows服务应用程序W

5、ebForm,Web窗体应用程序WPF应用程序(Windows Presentation Foundation) 新一代图形系统,集成WebForm/WinFormWCF服务应用程序(Windows Communication Foundation) 数据通信接口初识C#程序(控制台应用程序)新建项目控制台应用程序程序文件Program.cs:using System;/引用命名空间(注释)using System.Text;/自定义命名空间namespace ConsoleApplication1 class Program/类 /Main方法(程序入口) static void Main(

6、string args) Console.Write(Hello World); 初识C#程序(窗体应用程序)C#项目的组织解决方案项目项:文件(文件夹)命名空间与类的层次引用指令:using关键字Main方法Main可以放在任何类中,规范做法则是放在Program.cs中代码注释/单行注释/*/块注释/XML注释程序文件控制台程序:Program.cs窗体程序:Program.cs、Form1.cs、Form1.Designer.cs任务1:熟悉Visual Studio开发环境安装 Visual C# 2008 或者 Visual Studio 2008熟悉各种菜单、工具窗口新建并保存控制

7、台应用程序工程(选择C#语言)在Main方法中,输入语句:Console.Write(Hello World); 启动程序,查看运行结果新建并保存窗体应用程序工程(选择C#语言)新建一个窗体,并设置窗体标题、大小等相关信息在该窗体中插入一个标签控件,显示“Hello World!”发布成应用程序,安装试用第二章 C#基本语法与编程2.1 标识符与关键字关键字(保留字,系统标识符):C#中有特殊含义的标识符标识符:唯一标识代码中的各种程序元素,一般指用户标识符标识符的命名规则字符集遵循Unicode3.0标准只能使用字母、数字和个别特殊符号(大小写敏感)必须以字母或者下划线开头以“”符号开始时,

8、允许使用关键字作为标识符标识符必须“先定义后使用”2.2 数据类型值类型引用类型数 据 类 型描述取值范围sbyte有符号 8 位整数128127byte无符号 8 位整数0255short有符号 16 位整数3276832767ushort无符号 16 位整数065535int有符号 32 位整数21474836482147483647uint无符号 32 位整数04294967295long有符号 64 位整数92233720368547758089223372036854775807ulong无符号 64 位整数0184467440737095516151.整数类形: C#定义了8种整数

9、类型。它们在内存中占据的内存大小各不相同,取值范围也各不相同。值类型类型大致取值范围描述精度float1.510453.4103832位浮点数7位double5.0103241.71030864位浮点数1516位decimal1.010287.91028128位数据类型2829位有效位2.布尔类形:表示“真”或“假”的数据类型,取值为“true”或“false”,主要用于进行逻辑判断,类型标识符为bool。3.实数(浮点数)类型:单精度(float)、双精度(double)、财务及货币(decimal)值类型转义字符描 述转义字符描 述转义字符描 述n换行符f换页符0空字符t水平制表符Tab反

10、斜杠字符 v垂直制表符Tabr回车符单引号a感叹号b退格符双引号4.字符类型:C#使用字符类型(char)来处理ASCII字符和Unicode字符Unicode是16位字符,可以表示世界上多数已知的书面语言C#中的字符常量使用单引号将字符括起来C#使用转义字符来处理特殊字符,以“”开头char类型可以隐式转换为ushort、int、uint、long、ulong、float、double或decimal类型。值类型值类型5.枚举类型用一种便于记忆的标识符来表示有限个常数的集合 enum Days Mon, Tue, Wed, Thu, Fri, Sat, Sun;/Mon的值为0,其余的值依次

11、递增enum Days Mon=1, Tue, Wed, Thu, Fri, Sat, Sun=0; /Mon后面的枚举 元素的值依次递增从enum类型到基本类型的转换需要用显式类型转换来完成6.结构类型:复合数据类型struct 结构名成员声明列表(访问权限 数据类型 成员);;struct Student public int ID; /学号 public string Name; /姓名 public float Score; /成绩;引用类型引用类型:不存储实际数据,存储数据的引用(地址)包括类类型、字符串类型、数组类型、接口类型、委托类型数组数组定义后,在使用前必须初始化,也可以在定

12、义的同时初始化数组:数据类型 数组名;int num = new int31,2,5;多维数组:数据类型 , 多维数组名;int, num = new int2,3 1,2,3,4,5,6;交错数组(数组的数组/不规则数组):数据类型 数组名;int array = new int2 new int2 1,2 , new int33,4,5;常量与变量常量在程序运行期间值保持不变的量,只能赋一次值习惯上将常量所使用的标识符全部大写const int NUM = 10;变量在程序运行中可以改变的量int x,y;int a,b=3,c=20,d;数据类型的转换C#是一种强类型语言,通常不允许一种

13、类型替换另一种类型隐式转换:当被转换的类型的取值范围完全包含在转换到的类型的取值范围之内时才能执行隐式转换char c1=Y;int s1;s1 = c1;显式转换(强制类型转换):明确要求编译器将一种数据类型转换为另一种数据类型显式类型转换过程中可能导致数据精度损失或者引发异常short s1;int x1=13;s1 = (short)x1;s1 = Convert.ToInt16(x1); / .NET框架的类型转换类装箱与拆箱装箱与拆箱机制:C#语言中引入了让值类型在需要时转化为引用类型,以及让引用类型在需要时转换为值类型的机制。装箱是指将一个值类型隐式转换为一个object类型的过程

14、int x = 15;object obj = x; /利用隐式转换实现装箱object obj = (object) x; /利用显式转换实现装箱拆箱是指将一个object类型显式转换成一个值类型的过程int val = 100; object obj = val; /装箱int num = (int) obj; /拆箱2.3 常用运算符类型运算符描述算术运算符+、*、/、%实现数学上的基本算术运算功能逻辑运算符 &、|、!与布尔类型操作数组成逻辑表达式位运算符&、|、用于修改一个变量的二进制格式数据中单独的位字符串连接运算符+实现字符串串联增量和减量运算符+、自增自减运算,分为前缀和后缀运

15、算移位运算符 根据表达式规定的位数进行左移或右移,并将结果赋给操作数变量比较运算符 =、!=、=实现两个操作数的比较操作赋值运算符 =、+=、=、*=、/=、%=、&=、|=、=、=包括简单赋值和复合赋值运算,且左操作数必须是一个变量成员访问运算符 .用于对象和结构成员的访问索引运算符 用于数组和索引器数据类型转换运算符 ()用于实现显式类型转换条件运算符 ?:三元运算符对象创建运算符new用于动态创建对象和调用构造函数类型信息运算符 sizeof、is、typeof、assizeof只用于不安全的代码溢出异常控制运算符 checked、unchecked2.4 流程控制顺序结构选择结构循环结

16、构跳转语句选择结构if-else语句if(表达式)elseswich语句swich(表达式)case 常量表达式1:语句;break;default:语句;break;循环结构Whileint i=0,sum=0;while(i=100)i+;sum+=i;do-whileForint sum = 0; for (int i = 1; i = 100; i+)sum += i;Foreachchar A = 1,2,3,4,5; foreach (char t in A)Console.WriteLine(t);跳转语句break语句:跳出swich结构,嵌套时只能跳出一层continue语句

17、:跳出本次循环中尚未执行的语句return语句:退出类的方法,返回调用者,可返回值异常类型描述Exception 所有异常的基类SystemException 所有运行时生成的错误的基类IndexOutOfRangeException 仅当错误地对数组进行索引时,才由运行库引发NullReferenceException 仅当引用空对象时,才由运行库引发AccessViolationException 仅在访问无效内存时由运行库引发InvalidOperationException 当处于无效状态时,由方法引发ArgumentException 所有参数异常的基类ArgumentNullExc

18、eption 由不允许参数为空的方法引发ArgumentOutOfRangeException 由验证参数是否位于给定范围内的方法引发ExternalException 在运行库的外部环境中发生或针对这类环境的异常的基类COMException 封装 COM HRESULT 信息的异常SEHException 封装 Win32 结构化异常处理信息的异常 C#中的异常处理提供了一种处理系统级错误和应用程序级错误的结构化的、统一的、类型安全的方法。程序运行过程中所产生的异常一般可以分为两种类型:用户程序产生的异常和系统产生的异常。2.5 异常处理try-catch-finally语句tryCons

19、ole.WriteLine(try);catch(Exception e)Console.WriteLine(“catch);finallyConsole.WriteLine(finally);第三章 类和对象基本概念将客观世界中的对象模型化,形成一种计算机化的表示,并以此为基础来分析和解决问题便形成了面向对象技术。对象对象是对客观事物的抽象对象由属性和方法组成。属性反映了对象的信息特征,而方法则定义改变属性状态的各种操作。类具有相同属性和方法的对象可归纳成类,对象是类的一个实例,而对象的抽象是类。继承类有一定的结构,可以派生出子类,子类除了继承父类的属性和方法外还可以有自己的属性和方法。类是

20、C#中最基础的类型。类是一个数据结构,将数据成员(状态)和功能成员(行为)组合在一个单元中,进而体现了面向对象技术的封装性。定义格式:Attribute 类修饰符 class 类名 :基类和实现的接口列表 类成员定义类的定义修饰符描述none、internal类只能在当前项目中访问public类可以在任何地方访问abstract、internal abstract类只能在当前项目中访问,且不能实例化,只能继承public abstract 类可以在任何地方访问,且不能实例化,只能继承sealed、internal sealed类只能在当前项目中访问,且只能实例化,不能继承public seal

21、ed类可以在任何地方访问,且只能实例化,不能继承类成员的可访问性可访问性描述public访问不受限制,定义的成员可以在类的外部访问protected访问仅限于包含类或从包含类派生的类internal访问仅限于当前程序集(包)protected internal访问仅限于从包含类派生的当前程序集(包)或类private访问仅限于包含类类的成员类的成员分为数据成员和功能成员数据成员包括:成员常量,代表与类相关的常数数据;字段,类的变量。功能成员包括:方法,即类中的成员函数;属性,定义了命名的属性以及读写属性的相关的行为;索引,允许类的实例通过与数组相同的方法来索引;操作符,定义了可以用于类的实例上

22、的表达式操作;事件,定义了由类产生的事件公告;构造函数,对类的实例进行初始化的操作;析构函数,在类的实例销毁前执行与资源释放相关的操作。封装 encapsulation 什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。私有数据方法方法数据对象A对象B公有数据静态成员和非静态成员 类的成员可以是静态成员,也可以是非静态成员。静态成员用关键字static修饰,它们属于类。没有用static修饰的类成员称为非静态成员,它们属于对象。静态成员的特征:一个静态字段对应一个存储位置静态成员属于类,因此可

23、以在包含类的实例之间共享它们静态成员一般通过类来访问(非静态成员通过包含类的实例来访问)注意:区别理解“类”以及“类的实例(即对象)”构造函数与析构函数构造函数的名称与类名相同,没有返回类型。类在实例化的时候,调用构造函数析构函数在类析构时被调用(不能显式调用)成员字段,即类的变量,类中的数据成员,用来存储类所需的数据信息。class CalendarDate public readonly int month; /只读字段,实例创建后不能对其赋值 public int day; public static int year=2005; /静态字段,属于类的成员属性是对对象或类的字段进行特定访

24、问的成员,是字段的自然扩展,访问属性和字段的语法相同。public string NameListTile /读写属性 get return namelisttile; set namelisttile = value; 索引一种使对象能够用与数组相同的方式进行索引的成员。继承与多态在C#中,派生类只能从一个基类中继承修饰符 class 派生类名 :基类名派生类成员派生类能从它的直接基类中继承的成员包括方法、字段、属性、事件、索引(除了构造函数和析构函数)在派生类中声明与基类的同名成员,可以实现覆盖C#的多态性基类的虚拟方法与派生类的重载方法抽象类与抽象方法;密封类与密封方法类设计原则对真实世

25、界系统建模将数据和行为封装到对象中,类能够对真实对象以及与其它对象之间如何交互进行建模明确公共接口最小公共接口;隐藏实现;设计健壮的构造函数(和析构函数)应当将对象置于一种安全的初始状态在类中设计错误处理以合作为出发点,“任何类都不可能是孤岛”考虑重用和可扩展性移出不可移植的代码;让作用域尽可能小;提供复制和比较对象的方法;类要对自己负责第四章 Windows编程及多文档窗体Windows窗体应用程序模型窗体Form类是在应用程序中显示的任何窗口的表示形式。当为应用程序设计用户界面时,首先创建一个从Form派生的类。然后添加控件、设置属性、创建事件处理程序以及向窗体添加编程逻辑。控件添加到窗体

26、中的每个组件称为控件。事件Windows窗体编程模型基于事件。事件(Event)“事件”是当对象发生某些事情时,向其他对象提供通知的一种方法。在C#中是通过委托(delegate)实现的。事件有两个角色:事件发送方,指触发事件的对象事件接收方,指注册想在某种事件发生时被通知的对象Windows窗体的常用属性属性说明Name设置控件的名称AcceptButton设置当用户按Enter键时所单击的窗体上的按钮ActiveMdiChild获取当前活动的多文档界面(MDI)子窗体BackgroudImage设置在控件中显示的背景图像CancelButton设置当用户按Esc键时所单击的窗体上的按钮Co

27、ntextMenu设置与控件关联的快捷菜单Cursor设置当鼠标指针位于控件上时显示的光标HelpButton设置是否在窗体的标题栏中显示“帮助”按钮Icon设置窗体的显示图标IsMdiChild设置窗体是否为多文档界面(MDI)子窗体IsMdiContainer设置窗体是否为多文档界面(MDI)子窗体的容器MaximizeBox设置是否在窗体的标题栏中显示最大化按钮MinimumSize设置是否在窗体的标题栏中显示最小化按钮Text设置窗体显示的标题Windows控件(Button)的常用事件名称说明Click在单击 Button 时发生。 GotFocus在此元素获得逻辑焦点时发生。 In

28、itialized初始化此 FrameworkElement 时发生。 IsEnabledChanged在此元素的 IsEnabled 属性值更改时发生。 IsVisibleChanged在此元素的 IsVisible 属性值更改时发生。 KeyDown在焦点位于此元素上并且用户按下键时发生。 KeyUp在焦点位于此元素上并且用户释放键时发生。 LostFocus在此元素丢失逻辑焦点时发生。 MouseDown在指针位于此元素上并且按下任意鼠标按钮时发生。 MouseEnter在鼠标指针进入此元素的边界时发生。 MouseLeave在鼠标指针离开此元素的边界时发生。 MouseLeftButt

29、onDown在鼠标指针位于此元素上并且按下鼠标左键时发生。 MouseRightButtonDown在鼠标指针位于此元素上并且按下鼠标右键时发生。 MouseUp在鼠标指针位于此元素上并且松开任意鼠标按钮时发生。 MouseWheel在鼠标指针位于此元素上并且用户滚动鼠标滚轮时发生。 TextInput在此元素以设备无关模式获取文本时发生。 TouchDown当悬停在此元素上方的手指触摸屏幕时发生。 TouchEnter在触摸屏输入从此元素边界外部移动到其内部时发生。 TouchLeave在触摸屏输入从此元素边界内部移动到其外部时发生。 常用控件标签控件(Label)为控件提供运行时信息或说明

30、性文字,通常用于显示静态文本。 文本框控件(TextBox)用于接收用户的输入或者显示文本。常用的事件是TextChanged事件,当框中的内容发生改变时触发列表框控件(ListBox)用于显示供用户选择的选项列表,用户可以从中选择一项或多项SelectedIndexChanged事件和SelectedValueChanged事件。组合框控件(ComboBox)结合了文本框控件和列表框控件的功能,同时具有这两类控件的功能命令按钮控件(Button)命令按钮控件允许用户通过单击来响应各种操作常用的事件是Click事件窗体切换与参数传递窗体的打开与关闭Form frm1=new Form();fr

31、m1.ShowDialog();/模态方式显示,有返回值frm1.Show();/非模态方式,无返回值frm1.Close();* 模态显示指程序中只有当前窗体能与用户交互窗体间的参数传递重载窗体类的构造函数,允许在实例化时传递参数主窗体向从窗体传递参数定义全局类或者变量消息框与对话框消息框MessageBox.Show(内容,标题,按钮,图标)MessageBoxButtons 枚举值MessageBoxIcon 枚举值对话框通用对话框 CommonDialog 颜色对话框 ColorDialog字体对话框 FontDialog打开文件对话框 OpenFileDialog保存文件对话框 Sa

32、veFileDialog菜单设计与编程菜单是可视化编程的重要组成部分,通常分为下拉菜单(包括主菜单和子菜单)和快捷菜单两种。主菜单:显示在菜单栏上、窗体运行时始终显示的菜单。子菜单:主菜单下面的菜单。下拉菜单使用类MenuStrip创建快捷菜单:单击鼠标右键弹出的菜单快捷菜单使用类ContextMenuStrip创建多文档界面(MDI)编程MDI(Multiple-Document Interface):多文档界面,由一个父窗体和多个子窗体组成。MDI窗体允许同时打开多个子窗体,是一种能够同时处理两个或两个以上窗体的界面形式。创建MDI窗体的步骤:MDI父窗体的创建MDI子窗体的创建从父窗体中

33、调用子窗体。 实现方法父窗体创建Form1.IsMdiContainer=True;调用子窗体Form2 frm=new Form2();frm.MdiParent=this;frm.Show();窗体动作frm.Show();/打开新窗体frm.Hide();/隐藏窗体frm. Activate();/激活已打开的窗体frm.Close();/关闭窗体MDI的窗体传值技术以及细节处理调用窗体时,利用已配置的参数进行传傎通过类属性进行传傎防止重复打开子窗口设定子窗体排列方式任务2:C# Windows编程实践设计一个简单的计算器基本要求:实现四则运算扩展1:实现进制转换、按位运算以及科学计算等

34、扩展2:实现常用的数学函数计算(调用Math类)设计一个带菜单栏和状态栏的多窗体界面实验提示新建窗体程序工程,设定窗体属性放置输入输出控件(按钮/标签/文本框)并适当布局为不同的按钮编写响应方法(事件函数),注意按钮的分类09数字键(将当前按键值拼接到之前的值,注意前值为0情况)运算符号键(保存当前数值,标记按下的符号)等号键(读取缓存的运算符和操作数,转化成数值,选择运算方法,输出运算结果)数字键的代码复用:使用带参数的方法实现封装和数据隐藏,类的UML图UML是一种建模语言Unified Modeling Language类图由类名、属性和方法组成(+) 指示public(-) 指示pri

35、vate(#)指示protected用( : ) 指示返回类型数据隐藏用属性代替可见字段复杂操作使用方法继承的UML表示UML将继承表示为一条线,并有一个箭头指向超类带箭头的虚线指示一个接口类的组合类的聚集聚合(空心)复合(实心)类的关联(双向)类的关联(单向)多态 polymorphism多态类似的对象可以采用不同的方式对相同的消息作出响应父类中定义的属性和方法被子类继承后,可以具有不同的数据类型或者表现出不同的行为多态的实现覆盖(overriding)是子类实现对父类实现的替换第五章 字符串与字符编码5.1 String类在C#中,字符串类型将一组字符视为一个整体进行处理。C#使用关键字s

36、tring来定义字符串类型,对应着.NET类库的System.String类。System.String/zh-cn/library/system.string(v=VS.80).aspx常用字符串操作方法方法作用Compare比较两个指定的String对象CompareTo将此实例与指定的对象String进行比较,并返回二者相对值的指示Concat连接String的一个或多个实例,或Object的一个或多个实例的值的String表示形式Contains返回一个值,该值指示指定的 String 对象是否出现在此字符串中。Copy创建一个与指定的String具有相同值的String的新实例Cop

37、yTo将指定数目的字符从此实例中的指定位置复制到Unicode字符数组中的指定位置Equals确定两个String对象是否具有相同的值Format将指定的String中的每个格式项替换为相应对象的值的文本等效项IndexOf报告String或一个或多个字符在此字符串中的第一个匹配项的索引IndexOfAny报告指定Unicode字符数组中的任意字符在此实例中第一个匹配项的索引Insert在此实例中的指定索引位置插入一个指定的String实例LastIndexOf报告指定的Unicode字符或String在此实例中的最后一个匹配项的索引位置op_Equality确定两个指定的String对象是否

38、具有同一值op_Inequality确定两个指定的String对象是否具有不同的值常用字符串操作方法PadLeft右对齐字符,在左边用空格或指定的Unicode字符填充以达定的总长度PadRight左对齐字符,在右边用空格或指定的Unicode字符填充以达到指定的总长度ReferenceEquals确定指定的Object实例是否是相同的实例。(从Object继承)Remove从此实例中删除指定个数的字符Replace将指定Unicode字符或String的所有匹配项替换为其他指定的Unicode字符或StringStartsWith确定String实例的开头是否与指定的字符串匹配Substri

39、ng从此实例检索子字符串ToCharArray将此实例中的字符复制到 Unicode 字符数组ToLower返回此String转换为小写形式的副本ToString将此实例的值转换为StringToUpper返回此String转换为大写形式的副本Trim从此实例的开始位置和末尾移除一组指定字符的所有匹配项TrimEnd从此实例的结尾移除数组中指定的一组字符的所有匹配项TrimStart从此实例的开头移除数组中指定的一组字符的所有匹配项5.2 StringBuilder类与String的区别与联系String对象串联操作总是用现有字符串和新数据创建新的对象StringBuilder对象维护一个缓冲

40、区,以便容纳新数据的串联主要方法Remove方法Replace方法Insert方法Append方法AppendLine方法AppendFormat方法System.Text.StringBuilder/zh-cn/library/system.text.stringbuilder.aspx5.3 字符集与字符编码计算机的字符集/view/51987.htm主要字符集ASCII 字符集,单字节美国,1967年关于:/history/id=38460629GB2312 字符集,双字节中国,1981年BIG5 字符集,双字节中国台湾五公司,1984年GB18030 字符集,单/双/四字节中国,200

41、0年Unicode字符集,0-0 x10FFFF,Unicode 学术学会,1994年UTF-8,8位变长UTF-16,16位无符号UTF-32,32位无符号/view/40801.htmASCII码表Encoding类.NET Framework 提供以下Encoding类的实现以支持当前 Unicode 编码和其他编码ASCIIEncoding 将 Unicode 字符编码为单个 7 位 ASCII 字符。UTF7Encoding 使用 UTF-7 编码对 Unicode 字符进行编码。UTF8Encoding 使用 UTF-8 编码对 Unicode 字符进行编码。UnicodeEnco

42、ding 使用 UTF-16 编码对 Unicode 字符进行编码。UTF32Encoding 使用 UTF-32 编码对 Unicode 字符进行编码。System.Text.Encoding/zh-cn/library/system.text.encoding(VS.80).aspx字符与字符编码的转换将文符串转换成字节数组Encoding.ASCII.GetBytes(String)将字节数组转换成字符串Encoding.ASCII.GetString(Byte)/散列值、密文直接转换将出现乱码5.4 字节(数组)可视化处理方法Base64编码是一种基于64个(26=64)可打印字符来表

43、示二进制数据的表示方法。常用于处理文本数据的场合,表示、传输、存储二进制数据,如加解密及网络编码。可以将 3*8 bit 表示为 4*6 bit。关于:/view/1485202.htm实现Convert.ToBase64String(Byte)Convert.FromBase64String(String)字节的16进制显示:(散列值常用的表示法)tmpi.ToString(X2)/tmp为字节数组任务4:1.从身份证号码中提取信息输入身份证号从中提取出地区码、出生日期、性别等信息2.设计字符编码转换器实现字符与Base64字符的互转实现字符的16进制显示及其相互转换基于不同的字符编码,将字

44、符转换成16进制显示并比较3.选择一张照片,将其显示为Base64文本 *第六章 密码术基础与网络编程6.1 密码术基础 网络信息安全信息存储安全和信息传输安全。信息传输安全是指如何保证信息在网络传输的过程中不被泄露与不被攻击。保证网络中信息安全的主要技术是数据的加密与解密。加密与解密在密码学中,将源信息称为明文;对明文进行某种变换后生成的隐藏了其真实内容的信息称为密文;将明文变换为密文的过程称为加密;将密文经过逆变换恢复成明文的过程称为解密。计算机网络加密技术链路加密链路加密是目前常用的一种加密方法,通常用硬件在网络层以下的物理层和数据链路层中实现,它用于保护通信节点间的数据。 节点加密 节

45、点加密是链路加密的改进,其目的是克服链路加密在节点处易遭非法存取的缺点。在协议传输层上进行加密,是对源点和目标节点间传输的数据进行加密保护。 端-端加密网络层以上的加密,通常称为端-端加密。端-端加密是面向网络高层主体进行的加密,即在协议表示层上对传输的数据进行加密,而不对下层协议信息加密。协议信息以明文形式传输,用户数据在中间节点不需要加密。 数据加密模型消息源加密器解密器消息宿密钥源传输或存储安全信道数据加密表达式加密:C=En(Ke,P)P:信息明文K:密钥En:算法C:信息密文解密:P=Dn(Kd,C)传统加密技术替代密码(字符操作)定义:明文中的每一个字符被替换成密文中的另外一个字符

46、简单替代密码 凯撒密码(循环移位密码):把明文中所有的字母都用它右边的第k 个字母替代,并认为Z后边又是A ROT13:用字母表里am的字符来代替nz,用nz的字符来代替 am字符Eg: “v ybir lbh!” ? 多表替代密码(明文:how are you,密码:your)P=HOWAREYOU K=YOURYOURY Ek (P)=FCQRPSSFS 传统密码技术简单异或(按位操作)00=0 01=1 10=1 11=0 加密:1001 1100 = 0101解密:0101 1100 = 1001对称密码技术非对称密码技术密码个数1个2个算法速度较快较慢算法对称性对称,解密密钥可以从加

47、密密钥中推算出来不对称,解密密钥不能从加密密钥中推算出来主要应用领域数据的加密和解密对数据进行数字签名、确认、鉴定、密钥管理和数字封装等对称加密技术加密和解密过程均采用同一密钥 DES与AES非对称加密技术加密和解密过程采用不同的密钥RSA与ECC现代加密技术对称加密技术DES(数据加密算法,1976)64位分组加密AES(高级加密算法,2001)128位分组加密128/192/256位密钥初始变换64位的密文逆初始变换64位明文64位的密钥加密变换16轮子密钥生成DES原理:接收者将一对密码中的一个(公钥)公开,另一个秘密保存发送者使用接收者的公钥加密信息接收者使用私钥解密出原文数学模型:C

48、=E(Kp, P)P=D(Ks, C)特点:加密密码(公钥)Kp是公开信息,而解密密钥(私钥) Ks是保密的。公钥和私钥相互关联,但不可能根据公钥计算出私钥。 非对称加密技术HTTPS:电子信封技术的具体应用一对矛盾对称加密:速度快,密钥管理困难非对称加密:速度慢,解决密钥管理问题电子信封技术HTTPS(安全的HTTP通道,在HTTP下加入SSL层):客户端向服务器发送请求(包括版本、算法等)服务器向客户端发送响应以及证书(含公钥)客户端产生对称密钥,用服务器公钥加密后发送服务器用私钥解密,得到对称密钥双方确认该对称密钥后,进行保密通信(保密性)数据的完整性验证:报文鉴别技术 Hash函数也称

49、消息摘要(MD:Message Digest),将可变长度的报文M作为单向散列函数的输入,然后得出一个固定长度的标志 H(M),称为Hash值(哈希值)表达式:MD=H(M)Hash算法MD算法(MD5,128位)SHA算法(SHA-1,160位)HMAC算法报文鉴别码 MAC (Message Authentication Code)用一个密钥生成的一个小的数据块追加在报文的后面。表达式:MAC = F(K,M)数据的不可抵赖性:数字签名技术数字签名就是为了达到签名的效果,附加在数据单元上的一些数据。数字签名的要素:签名信息能被接收者读取发送者事后不能抵赖(信息内容及签名事实)接受者不能伪造

50、签名数字签名的实现产生信息原文的摘要用私钥对摘要进行加密(签名)将原文和签名一起传输接收者用发送者的公钥解密签名得到摘要产生信息原文的摘要并与上述签名摘要比较数字签名技术示意图6.2 .NET密码术编程基础 System.Security.Cryptography/zh-cn/library/system.security.cryptography.aspx提供包括安全的数据加密与解密、确保数据的完整性,以及处理数字签名和证书等加密服务核心加密类分为三层,如右图6.2.1 哈希(散列)算法及编程哈希函数是现代密码系统的基础。哈希函数将任意长度的二进制字符串映射为固定长度的小二进制字符串(称为哈

51、希值/散列值)。哈希值用作表示大量数据的固定大小的唯一值。哈希函数通常用于数字签名和保持数据完整性等。哈希函数的特点:在计算时不可能将两个不同的输入通过哈希算法获取相同的值。如果相应的数据匹配,则两个数据集的哈希应该匹配。数据的少量更改会在哈希值中产生不可预知的大量更改。哈希算法的编程实现.NET 哈希算法类都继承自HashAlgorithm抽象类。类说明KeyedHashAlgorithm显示所有加密哈希算法实现均必须从中派生的抽象类。MD5CryptoServiceProvider使用加密服务提供程序 (CSP) 提供的实现,计算输入数据的 MD5 哈希值。SHA1CryptoServic

52、eProvider使用加密服务提供程序 (CSP) 提供的实现计算输入数据的 SHA1 哈希值。MD5表示MD5哈希算法的所有实现均从中继承的抽象类。RIPEMD160表示 MD160 哈希算法的所有实现均从中继承的抽象类。SHA1计算输入数据的SHA1哈希值。SHA256计算输入数据的SHA256哈希值。SHA384计算输入数据的SHA384哈希值。SHA512计算输入数据的SHA512哈希值。哈希(散列)编程实例/获取字符编码byte aaa = Encoding.UTF8.GetBytes(str);/使用MD5CryptoServiceProvider类创建md5对象MD5Crypto

53、ServiceProvider md = new MD5CryptoServiceProvider();/也可以使用MD5类创建md5对象/MD5 md = MD5.Create();/计算md5值byte bbb = md.ComputeHash(aaa);/显示处理StringBuilder sb = new StringBuilder();foreach (byte tmp in bbb) sb.Append(tmp.ToString(X2);return sb.ToString();6.2.2 对称加密算法及编程特点:算法公开、计算量小、加密速度快、加密效率高。主要算法:DES、3DE

54、S、RC5、AES等分组密码的工作模式电子密码本 (electronic codebook mode,ECB )密码分组链接 (cipher block chaining, CBC )密码反馈 (cipher feedback, CFB)输出反馈 (output feedback, OFB)计数器 (counter, CTR )算法工作模式中的初始向量 IVSymmetricAlgorithm类 (留意CBC,Key,IV)/zh-cn/library/system.security.cryptography.symmetricalgorithm(v=VS.80).aspx对称加密的主要算法(

55、一)DEA/DES数据加密算法(Data Encryption Algorithm,DEA),数据加密标准(Data Encryption Standard,DES)使用一个56位的密钥以及附加的8位奇偶校验位,产生最大64位的分组大小3DES,Triple DES三重数据加密算法(Triple Data Encryption Algorithm,TDEA),用双长度(128位)密钥K=(KL|KR)将64位明文数据块(分组)进行3次DES加密/解密。加密:Y = DES(KL)DES-1(KR)DES(KLX)解密:X = DES-1(KL)DES (KR) DES-1(KLY)对称加密的主

56、要算法(二)AES加密算法高级加密标准(Advanced Encryption Standard),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。AES加密数据块分组长度必须为128位,密钥长度可以是128、192或256位加解密处理的参数密钥的长度与填充初始化向量的长度与填充:长度与数据块分组长度一致SymmetricAlgorithm 的主要成员属性描述BlockSize 获取或设置加密操作的块大小(以位为单位)FeedbackSize 获取或设置加密操作的反馈大小(以位为单位)IV 获取或设置对称算法的初始化向量 (IV)Key 获取或设置对称算法的密钥KeySize

57、 获取或设置对称算法所用密钥的大小(以位为单位)LegalBlockSizes 获取对称算法支持的块大小(以位为单位)LegalKeySizes 获取对称算法支持的密钥大小(以位为单位)Mode 获取或设置对称算法的运算模式Padding 获取或设置对称算法中使用的填充模式方法描述Clear 释放由 SymmetricAlgorithm 类使用的所有资源Create 创建用于执行对称算法的加密实例CreateDecryptor 用指定的密钥和初始化向量创建一个对称解密器对象 CreateEncryptor 用指定的密钥和初始化向量创建一个对称加密器对象 GenerateIV 为对称加密算法生成

58、一个随机的初始化向量(IV),并重写IV属性中所存储的值 GenerateKey 为对称加密算法生成一个随机密钥(Key),并重写Key属性的值 ValidKeySize 确定指定的密钥大小对当前算法是否有效 对称加密算法及编程.NET 在 SymmetricAlgorithm 类的基础上,给出了抽象算法实现类DES、RC2、TripleDES和Rijndael,并在此基础上给出了具体加密方案实现类。AES加密编程实现Byte bKey = Encoding.UTF8.GetBytes(Keystr.PadRight(32); Byte bIV = Encoding.UTF8.GetBytes

59、(IVstr.PadRight(16); Byte Data = Encoding.UTF8.GetBytes(Datastr); /创建内存流MemoryStream ms = new MemoryStream();/创建AES对象,并内存流对象包装成加密器对象Rijndael Aes = Rijndael.Create();CryptoStream cs = new CryptoStream(ms, Aes.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write);/明文数据写入加密器cs.Write(Data, 0, Data.Length)

60、;cs.FlushFinalBlock();/返回密文流Byte Cryptograph = ms.ToArray();string Outstr = Convert.ToBase64String(Cryptograph);AES解密编程实现Byte bKey = Encoding.UTF8.GetBytes(Keystr.PadRight(32); Byte bIV = Encoding.UTF8.GetBytes(IVstr.PadRight(16); Byte Data = Convert.FromBase64String(EnDatastr); /创建内存流,并存入密文MemorySt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论