網(wǎng)絡(luò)與通信程序設(shè)計(jì)(C#)全套教學(xué)課件_第1頁(yè)
網(wǎng)絡(luò)與通信程序設(shè)計(jì)(C#)全套教學(xué)課件_第2頁(yè)
網(wǎng)絡(luò)與通信程序設(shè)計(jì)(C#)全套教學(xué)課件_第3頁(yè)
網(wǎng)絡(luò)與通信程序設(shè)計(jì)(C#)全套教學(xué)課件_第4頁(yè)
網(wǎng)絡(luò)與通信程序設(shè)計(jì)(C#)全套教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩229頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、網(wǎng)絡(luò)與通信程序設(shè)計(jì)(C#)第一章 .NET平臺(tái)及C#簡(jiǎn)介.NET平臺(tái) .NET是微軟公司推出的一個(gè)全新概念的技術(shù),它代表了一個(gè)集合、一個(gè)環(huán)境和一個(gè)可以作為平臺(tái)支持下一代Internet的可編程結(jié)構(gòu)。計(jì)算機(jī)與程序語(yǔ)言1957前,插拔、開關(guān)、紙帶、機(jī)器語(yǔ)言、匯編1957,IBM,F(xiàn)ORTRAN,科學(xué)與工程計(jì)算1969,湯普森,Unix;里奇,為Unix開發(fā)出C1970,阿倫凱,Smalltalk語(yǔ)言,一切皆對(duì)象(萬(wàn)能細(xì)胞)1975,微軟商化M.BASIC,發(fā)家1983,C+面世,”帶類的C”,適用于編寫大型程序1985,Windows投放市場(chǎng),1991年成為贏家,推出VB1992,高斯林,Oak語(yǔ)

2、言,在C+基礎(chǔ)上吸收Smalltalk思想1995,高斯林,Oak改名為Java,互聯(lián)網(wǎng)編程(跨系統(tǒng),跨平臺(tái))2001,微軟輸?shù)鬔ava官司,推出C#C的一家CSmalltalkC+JavaC#C#語(yǔ)言簡(jiǎn)介 C#的背景:從C和C+演變而來的,結(jié)合了C/C+的強(qiáng)大功能、Java的面向?qū)ο筇匦院蚔isual Basic的易用性,從而成為一種簡(jiǎn)單的類型安全、面向?qū)ο蟮木幊陶Z(yǔ)言,是.NET公共語(yǔ)言運(yùn)行環(huán)境的內(nèi)置語(yǔ)言。C#的特點(diǎn):語(yǔ)法簡(jiǎn)潔面向?qū)ο笤O(shè)計(jì)與Web緊密結(jié)合完整的安全性和錯(cuò)誤處理版本控制兼容性,靈活性 C#與C+的比較編譯目標(biāo):C+代碼直接編譯為本地可執(zhí)行代碼,C#默認(rèn)編譯為中間語(yǔ)言(IL)代碼

3、,執(zhí)行時(shí)再通過Just-In-Time將需要的模塊臨時(shí)編譯成本地代碼。內(nèi)存管理:C+需要顯式地刪除動(dòng)態(tài)分配給堆的內(nèi)存,而C#不需要這么做,C#采用垃圾回收機(jī)制自動(dòng)在合適的時(shí)機(jī)回收不再使用的內(nèi)存。指針:C+中大量地使用指針,而C#使用對(duì)類實(shí)例的引用,如果確實(shí)想在C#中使用指針,必須聲明該內(nèi)容是非安全的。字符串處理:在C#中,字符串是作為一種基本數(shù)據(jù)類型來對(duì)待的,因此比C+中對(duì)字符串的處理要簡(jiǎn)單得多。庫(kù):C+依賴于以繼承和模板為基礎(chǔ)的標(biāo)準(zhǔn)庫(kù),C#則依賴于.NET基庫(kù)。類繼承:C+允許類的多繼承,而C#只允許類的單繼承,通過接口才能實(shí)現(xiàn)多繼承。 C#和Java的比較C#與Java的相同之處。兩者都編

4、譯成跨平臺(tái)的、跨語(yǔ)言的代碼,并且代碼只能在一個(gè)受控制的環(huán)境中運(yùn)行。自動(dòng)收集垃圾內(nèi)存,并且取消了指針。在C#中可以使用指針,不過必須注明unsafe關(guān)鍵字。都不需要頭文件,所有的代碼都被“包(package)”限制在某個(gè)范圍內(nèi),并且因?yàn)闆]有頭文件,所以消除了類定義的循環(huán)依賴。C#與Java的區(qū)別C#面向?qū)ο蟮某潭缺菾ava高。C#具有比Java更強(qiáng)大的功能。C#的速度比Java快。Visual Studio 2008 集成開發(fā)環(huán)境Visual Studio 2013 集成開發(fā)環(huán)境Visual C# 的應(yīng)用程序類型控制臺(tái)應(yīng)用程序WinForm,Windows窗體應(yīng)用程序Windows服務(wù)應(yīng)用程序W

5、ebForm,Web窗體應(yīng)用程序WPF應(yīng)用程序(Windows Presentation Foundation) 新一代圖形系統(tǒng),集成WebForm/WinFormWCF服務(wù)應(yīng)用程序(Windows Communication Foundation) 數(shù)據(jù)通信接口初識(shí)C#程序(控制臺(tái)應(yīng)用程序)新建項(xiàng)目控制臺(tái)應(yīng)用程序程序文件Program.cs:using System;/引用命名空間(注釋)using System.Text;/自定義命名空間namespace ConsoleApplication1 class Program/類 /Main方法(程序入口) static void Main(

6、string args) Console.Write(Hello World); 初識(shí)C#程序(窗體應(yīng)用程序)C#項(xiàng)目的組織解決方案項(xiàng)目項(xiàng):文件(文件夾)命名空間與類的層次引用指令:using關(guān)鍵字Main方法Main可以放在任何類中,規(guī)范做法則是放在Program.cs中代碼注釋/單行注釋/*/塊注釋/XML注釋程序文件控制臺(tái)程序:Program.cs窗體程序:Program.cs、Form1.cs、Form1.Designer.cs任務(wù)1:熟悉Visual Studio開發(fā)環(huán)境安裝 Visual C# 2008 或者 Visual Studio 2008熟悉各種菜單、工具窗口新建并保存控制

7、臺(tái)應(yīng)用程序工程(選擇C#語(yǔ)言)在Main方法中,輸入語(yǔ)句:Console.Write(Hello World); 啟動(dòng)程序,查看運(yùn)行結(jié)果新建并保存窗體應(yīng)用程序工程(選擇C#語(yǔ)言)新建一個(gè)窗體,并設(shè)置窗體標(biāo)題、大小等相關(guān)信息在該窗體中插入一個(gè)標(biāo)簽控件,顯示“Hello World!”發(fā)布成應(yīng)用程序,安裝試用第二章 C#基本語(yǔ)法與編程2.1 標(biāo)識(shí)符與關(guān)鍵字關(guān)鍵字(保留字,系統(tǒng)標(biāo)識(shí)符):C#中有特殊含義的標(biāo)識(shí)符標(biāo)識(shí)符:唯一標(biāo)識(shí)代碼中的各種程序元素,一般指用戶標(biāo)識(shí)符標(biāo)識(shí)符的命名規(guī)則字符集遵循Unicode3.0標(biāo)準(zhǔn)只能使用字母、數(shù)字和個(gè)別特殊符號(hào)(大小寫敏感)必須以字母或者下劃線開頭以“”符號(hào)開始時(shí),

8、允許使用關(guān)鍵字作為標(biāo)識(shí)符標(biāo)識(shí)符必須“先定義后使用”2.2 數(shù)據(jù)類型值類型引用類型數(shù) 據(jù) 類 型描述取值范圍sbyte有符號(hào) 8 位整數(shù)128127byte無符號(hào) 8 位整數(shù)0255short有符號(hào) 16 位整數(shù)3276832767ushort無符號(hào) 16 位整數(shù)065535int有符號(hào) 32 位整數(shù)21474836482147483647uint無符號(hào) 32 位整數(shù)04294967295long有符號(hào) 64 位整數(shù)92233720368547758089223372036854775807ulong無符號(hào) 64 位整數(shù)0184467440737095516151.整數(shù)類形: C#定義了8種整數(shù)

9、類型。它們?cè)趦?nèi)存中占據(jù)的內(nèi)存大小各不相同,取值范圍也各不相同。值類型類型大致取值范圍描述精度f(wàn)loat1.510453.4103832位浮點(diǎn)數(shù)7位double5.0103241.71030864位浮點(diǎn)數(shù)1516位decimal1.010287.91028128位數(shù)據(jù)類型2829位有效位2.布爾類形:表示“真”或“假”的數(shù)據(jù)類型,取值為“true”或“false”,主要用于進(jìn)行邏輯判斷,類型標(biāo)識(shí)符為bool。3.實(shí)數(shù)(浮點(diǎn)數(shù))類型:?jiǎn)尉龋╢loat)、雙精度(double)、財(cái)務(wù)及貨幣(decimal)值類型轉(zhuǎn)義字符描 述轉(zhuǎn)義字符描 述轉(zhuǎn)義字符描 述n換行符f換頁(yè)符0空字符t水平制表符Tab反

10、斜杠字符 v垂直制表符Tabr回車符單引號(hào)a感嘆號(hào)b退格符雙引號(hào)4.字符類型:C#使用字符類型(char)來處理ASCII字符和Unicode字符Unicode是16位字符,可以表示世界上多數(shù)已知的書面語(yǔ)言C#中的字符常量使用單引號(hào)將字符括起來C#使用轉(zhuǎn)義字符來處理特殊字符,以“”開頭char類型可以隱式轉(zhuǎn)換為ushort、int、uint、long、ulong、float、double或decimal類型。值類型值類型5.枚舉類型用一種便于記憶的標(biāo)識(shí)符來表示有限個(gè)常數(shù)的集合 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類型到基本類型的轉(zhuǎn)換需要用顯式類型轉(zhuǎn)換來完成6.結(jié)構(gòu)類型:復(fù)合數(shù)據(jù)類型struct 結(jié)構(gòu)名成員聲明列表(訪問權(quán)限 數(shù)據(jù)類型 成員);;struct Student public int ID; /學(xué)號(hào) public string Name; /姓名 public float Score; /成績(jī);引用類型引用類型:不存儲(chǔ)實(shí)際數(shù)據(jù),存儲(chǔ)數(shù)據(jù)的引用(地址)包括類類型、字符串類型、數(shù)組類型、接口類型、委托類型數(shù)組數(shù)組定義后,在使用前必須初始化,也可以在定

12、義的同時(shí)初始化數(shù)組:數(shù)據(jù)類型 數(shù)組名;int num = new int31,2,5;多維數(shù)組:數(shù)據(jù)類型 , 多維數(shù)組名;int, num = new int2,3 1,2,3,4,5,6;交錯(cuò)數(shù)組(數(shù)組的數(shù)組/不規(guī)則數(shù)組):數(shù)據(jù)類型 數(shù)組名;int array = new int2 new int2 1,2 , new int33,4,5;常量與變量常量在程序運(yùn)行期間值保持不變的量,只能賦一次值習(xí)慣上將常量所使用的標(biāo)識(shí)符全部大寫const int NUM = 10;變量在程序運(yùn)行中可以改變的量int x,y;int a,b=3,c=20,d;數(shù)據(jù)類型的轉(zhuǎn)換C#是一種強(qiáng)類型語(yǔ)言,通常不允許一種

13、類型替換另一種類型隱式轉(zhuǎn)換:當(dāng)被轉(zhuǎn)換的類型的取值范圍完全包含在轉(zhuǎn)換到的類型的取值范圍之內(nèi)時(shí)才能執(zhí)行隱式轉(zhuǎn)換char c1=Y;int s1;s1 = c1;顯式轉(zhuǎn)換(強(qiáng)制類型轉(zhuǎn)換):明確要求編譯器將一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型顯式類型轉(zhuǎn)換過程中可能導(dǎo)致數(shù)據(jù)精度損失或者引發(fā)異常short s1;int x1=13;s1 = (short)x1;s1 = Convert.ToInt16(x1); / .NET框架的類型轉(zhuǎn)換類裝箱與拆箱裝箱與拆箱機(jī)制:C#語(yǔ)言中引入了讓值類型在需要時(shí)轉(zhuǎn)化為引用類型,以及讓引用類型在需要時(shí)轉(zhuǎn)換為值類型的機(jī)制。裝箱是指將一個(gè)值類型隱式轉(zhuǎn)換為一個(gè)object類型的過程

14、int x = 15;object obj = x; /利用隱式轉(zhuǎn)換實(shí)現(xiàn)裝箱object obj = (object) x; /利用顯式轉(zhuǎn)換實(shí)現(xiàn)裝箱拆箱是指將一個(gè)object類型顯式轉(zhuǎn)換成一個(gè)值類型的過程int val = 100; object obj = val; /裝箱int num = (int) obj; /拆箱2.3 常用運(yùn)算符類型運(yùn)算符描述算術(shù)運(yùn)算符+、*、/、%實(shí)現(xiàn)數(shù)學(xué)上的基本算術(shù)運(yùn)算功能邏輯運(yùn)算符 &、|、!與布爾類型操作數(shù)組成邏輯表達(dá)式位運(yùn)算符&、|、用于修改一個(gè)變量的二進(jìn)制格式數(shù)據(jù)中單獨(dú)的位字符串連接運(yùn)算符+實(shí)現(xiàn)字符串串聯(lián)增量和減量運(yùn)算符+、自增自減運(yùn)算,分為前綴和后綴運(yùn)

15、算移位運(yùn)算符 根據(jù)表達(dá)式規(guī)定的位數(shù)進(jìn)行左移或右移,并將結(jié)果賦給操作數(shù)變量比較運(yùn)算符 =、!=、=實(shí)現(xiàn)兩個(gè)操作數(shù)的比較操作賦值運(yùn)算符 =、+=、=、*=、/=、%=、&=、|=、=、=包括簡(jiǎn)單賦值和復(fù)合賦值運(yùn)算,且左操作數(shù)必須是一個(gè)變量成員訪問運(yùn)算符 .用于對(duì)象和結(jié)構(gòu)成員的訪問索引運(yùn)算符 用于數(shù)組和索引器數(shù)據(jù)類型轉(zhuǎn)換運(yùn)算符 ()用于實(shí)現(xiàn)顯式類型轉(zhuǎn)換條件運(yùn)算符 ?:三元運(yùn)算符對(duì)象創(chuàng)建運(yùn)算符new用于動(dòng)態(tài)創(chuàng)建對(duì)象和調(diào)用構(gòu)造函數(shù)類型信息運(yùn)算符 sizeof、is、typeof、assizeof只用于不安全的代碼溢出異??刂七\(yùn)算符 checked、unchecked2.4 流程控制順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)

16、構(gòu)跳轉(zhuǎn)語(yǔ)句選擇結(jié)構(gòu)if-else語(yǔ)句if(表達(dá)式)elseswich語(yǔ)句swich(表達(dá)式)case 常量表達(dá)式1:語(yǔ)句;break;default:語(yǔ)句;break;循環(huán)結(jié)構(gòu)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);跳轉(zhuǎn)語(yǔ)句break語(yǔ)句:跳出swich結(jié)構(gòu),嵌套時(shí)只能跳出一層continue語(yǔ)句

17、:跳出本次循環(huán)中尚未執(zhí)行的語(yǔ)句return語(yǔ)句:退出類的方法,返回調(diào)用者,可返回值異常類型描述Exception 所有異常的基類SystemException 所有運(yùn)行時(shí)生成的錯(cuò)誤的基類IndexOutOfRangeException 僅當(dāng)錯(cuò)誤地對(duì)數(shù)組進(jìn)行索引時(shí),才由運(yùn)行庫(kù)引發(fā)NullReferenceException 僅當(dāng)引用空對(duì)象時(shí),才由運(yùn)行庫(kù)引發(fā)AccessViolationException 僅在訪問無效內(nèi)存時(shí)由運(yùn)行庫(kù)引發(fā)InvalidOperationException 當(dāng)處于無效狀態(tài)時(shí),由方法引發(fā)ArgumentException 所有參數(shù)異常的基類ArgumentNullExc

18、eption 由不允許參數(shù)為空的方法引發(fā)ArgumentOutOfRangeException 由驗(yàn)證參數(shù)是否位于給定范圍內(nèi)的方法引發(fā)ExternalException 在運(yùn)行庫(kù)的外部環(huán)境中發(fā)生或針對(duì)這類環(huán)境的異常的基類COMException 封裝 COM HRESULT 信息的異常SEHException 封裝 Win32 結(jié)構(gòu)化異常處理信息的異常 C#中的異常處理提供了一種處理系統(tǒng)級(jí)錯(cuò)誤和應(yīng)用程序級(jí)錯(cuò)誤的結(jié)構(gòu)化的、統(tǒng)一的、類型安全的方法。程序運(yùn)行過程中所產(chǎn)生的異常一般可以分為兩種類型:用戶程序產(chǎn)生的異常和系統(tǒng)產(chǎn)生的異常。2.5 異常處理try-catch-finally語(yǔ)句tryCons

19、ole.WriteLine(try);catch(Exception e)Console.WriteLine(“catch);finallyConsole.WriteLine(finally);第三章 類和對(duì)象基本概念將客觀世界中的對(duì)象模型化,形成一種計(jì)算機(jī)化的表示,并以此為基礎(chǔ)來分析和解決問題便形成了面向?qū)ο蠹夹g(shù)。對(duì)象對(duì)象是對(duì)客觀事物的抽象對(duì)象由屬性和方法組成。屬性反映了對(duì)象的信息特征,而方法則定義改變屬性狀態(tài)的各種操作。類具有相同屬性和方法的對(duì)象可歸納成類,對(duì)象是類的一個(gè)實(shí)例,而對(duì)象的抽象是類。繼承類有一定的結(jié)構(gòu),可以派生出子類,子類除了繼承父類的屬性和方法外還可以有自己的屬性和方法。類是

20、C#中最基礎(chǔ)的類型。類是一個(gè)數(shù)據(jù)結(jié)構(gòu),將數(shù)據(jù)成員(狀態(tài))和功能成員(行為)組合在一個(gè)單元中,進(jìn)而體現(xiàn)了面向?qū)ο蠹夹g(shù)的封裝性。定義格式:Attribute 類修飾符 class 類名 :基類和實(shí)現(xiàn)的接口列表 類成員定義類的定義修飾符描述none、internal類只能在當(dāng)前項(xiàng)目中訪問public類可以在任何地方訪問abstract、internal abstract類只能在當(dāng)前項(xiàng)目中訪問,且不能實(shí)例化,只能繼承public abstract 類可以在任何地方訪問,且不能實(shí)例化,只能繼承sealed、internal sealed類只能在當(dāng)前項(xiàng)目中訪問,且只能實(shí)例化,不能繼承public seal

21、ed類可以在任何地方訪問,且只能實(shí)例化,不能繼承類成員的可訪問性可訪問性描述public訪問不受限制,定義的成員可以在類的外部訪問protected訪問僅限于包含類或從包含類派生的類internal訪問僅限于當(dāng)前程序集(包)protected internal訪問僅限于從包含類派生的當(dāng)前程序集(包)或類private訪問僅限于包含類類的成員類的成員分為數(shù)據(jù)成員和功能成員數(shù)據(jù)成員包括:成員常量,代表與類相關(guān)的常數(shù)數(shù)據(jù);字段,類的變量。功能成員包括:方法,即類中的成員函數(shù);屬性,定義了命名的屬性以及讀寫屬性的相關(guān)的行為;索引,允許類的實(shí)例通過與數(shù)組相同的方法來索引;操作符,定義了可以用于類的實(shí)例上

22、的表達(dá)式操作;事件,定義了由類產(chǎn)生的事件公告;構(gòu)造函數(shù),對(duì)類的實(shí)例進(jìn)行初始化的操作;析構(gòu)函數(shù),在類的實(shí)例銷毀前執(zhí)行與資源釋放相關(guān)的操作。封裝 encapsulation 什么是封裝?封裝把對(duì)象的所有組成部分組合在一起,封裝定義程序如何引用對(duì)象的數(shù)據(jù)封裝實(shí)際上使用方法將類的數(shù)據(jù)隱藏起來,控制用戶對(duì)類的修改和訪問數(shù)據(jù)的程度。私有數(shù)據(jù)方法方法數(shù)據(jù)對(duì)象A對(duì)象B公有數(shù)據(jù)靜態(tài)成員和非靜態(tài)成員 類的成員可以是靜態(tài)成員,也可以是非靜態(tài)成員。靜態(tài)成員用關(guān)鍵字static修飾,它們屬于類。沒有用static修飾的類成員稱為非靜態(tài)成員,它們屬于對(duì)象。靜態(tài)成員的特征:一個(gè)靜態(tài)字段對(duì)應(yīng)一個(gè)存儲(chǔ)位置靜態(tài)成員屬于類,因此可

23、以在包含類的實(shí)例之間共享它們靜態(tài)成員一般通過類來訪問(非靜態(tài)成員通過包含類的實(shí)例來訪問)注意:區(qū)別理解“類”以及“類的實(shí)例(即對(duì)象)”構(gòu)造函數(shù)與析構(gòu)函數(shù)構(gòu)造函數(shù)的名稱與類名相同,沒有返回類型。類在實(shí)例化的時(shí)候,調(diào)用構(gòu)造函數(shù)析構(gòu)函數(shù)在類析構(gòu)時(shí)被調(diào)用(不能顯式調(diào)用)成員字段,即類的變量,類中的數(shù)據(jù)成員,用來存儲(chǔ)類所需的數(shù)據(jù)信息。class CalendarDate public readonly int month; /只讀字段,實(shí)例創(chuàng)建后不能對(duì)其賦值 public int day; public static int year=2005; /靜態(tài)字段,屬于類的成員屬性是對(duì)對(duì)象或類的字段進(jìn)行特定訪

24、問的成員,是字段的自然擴(kuò)展,訪問屬性和字段的語(yǔ)法相同。public string NameListTile /讀寫屬性 get return namelisttile; set namelisttile = value; 索引一種使對(duì)象能夠用與數(shù)組相同的方式進(jìn)行索引的成員。繼承與多態(tài)在C#中,派生類只能從一個(gè)基類中繼承修飾符 class 派生類名 :基類名派生類成員派生類能從它的直接基類中繼承的成員包括方法、字段、屬性、事件、索引(除了構(gòu)造函數(shù)和析構(gòu)函數(shù))在派生類中聲明與基類的同名成員,可以實(shí)現(xiàn)覆蓋C#的多態(tài)性基類的虛擬方法與派生類的重載方法抽象類與抽象方法;密封類與密封方法類設(shè)計(jì)原則對(duì)真實(shí)世

25、界系統(tǒng)建模將數(shù)據(jù)和行為封裝到對(duì)象中,類能夠?qū)φ鎸?shí)對(duì)象以及與其它對(duì)象之間如何交互進(jìn)行建模明確公共接口最小公共接口;隱藏實(shí)現(xiàn);設(shè)計(jì)健壯的構(gòu)造函數(shù)(和析構(gòu)函數(shù))應(yīng)當(dāng)將對(duì)象置于一種安全的初始狀態(tài)在類中設(shè)計(jì)錯(cuò)誤處理以合作為出發(fā)點(diǎn),“任何類都不可能是孤島”考慮重用和可擴(kuò)展性移出不可移植的代碼;讓作用域盡可能?。惶峁?fù)制和比較對(duì)象的方法;類要對(duì)自己負(fù)責(zé)第四章 Windows編程及多文檔窗體Windows窗體應(yīng)用程序模型窗體Form類是在應(yīng)用程序中顯示的任何窗口的表示形式。當(dāng)為應(yīng)用程序設(shè)計(jì)用戶界面時(shí),首先創(chuàng)建一個(gè)從Form派生的類。然后添加控件、設(shè)置屬性、創(chuàng)建事件處理程序以及向窗體添加編程邏輯??丶砑拥酱绑w

26、中的每個(gè)組件稱為控件。事件Windows窗體編程模型基于事件。事件(Event)“事件”是當(dāng)對(duì)象發(fā)生某些事情時(shí),向其他對(duì)象提供通知的一種方法。在C#中是通過委托(delegate)實(shí)現(xiàn)的。事件有兩個(gè)角色:事件發(fā)送方,指觸發(fā)事件的對(duì)象事件接收方,指注冊(cè)想在某種事件發(fā)生時(shí)被通知的對(duì)象Windows窗體的常用屬性屬性說明Name設(shè)置控件的名稱AcceptButton設(shè)置當(dāng)用戶按Enter鍵時(shí)所單擊的窗體上的按鈕ActiveMdiChild獲取當(dāng)前活動(dòng)的多文檔界面(MDI)子窗體BackgroudImage設(shè)置在控件中顯示的背景圖像CancelButton設(shè)置當(dāng)用戶按Esc鍵時(shí)所單擊的窗體上的按鈕Co

27、ntextMenu設(shè)置與控件關(guān)聯(lián)的快捷菜單Cursor設(shè)置當(dāng)鼠標(biāo)指針位于控件上時(shí)顯示的光標(biāo)HelpButton設(shè)置是否在窗體的標(biāo)題欄中顯示“幫助”按鈕Icon設(shè)置窗體的顯示圖標(biāo)IsMdiChild設(shè)置窗體是否為多文檔界面(MDI)子窗體IsMdiContainer設(shè)置窗體是否為多文檔界面(MDI)子窗體的容器MaximizeBox設(shè)置是否在窗體的標(biāo)題欄中顯示最大化按鈕MinimumSize設(shè)置是否在窗體的標(biāo)題欄中顯示最小化按鈕Text設(shè)置窗體顯示的標(biāo)題Windows控件(Button)的常用事件名稱說明Click在單擊 Button 時(shí)發(fā)生。 GotFocus在此元素獲得邏輯焦點(diǎn)時(shí)發(fā)生。 In

28、itialized初始化此 FrameworkElement 時(shí)發(fā)生。 IsEnabledChanged在此元素的 IsEnabled 屬性值更改時(shí)發(fā)生。 IsVisibleChanged在此元素的 IsVisible 屬性值更改時(shí)發(fā)生。 KeyDown在焦點(diǎn)位于此元素上并且用戶按下鍵時(shí)發(fā)生。 KeyUp在焦點(diǎn)位于此元素上并且用戶釋放鍵時(shí)發(fā)生。 LostFocus在此元素丟失邏輯焦點(diǎn)時(shí)發(fā)生。 MouseDown在指針位于此元素上并且按下任意鼠標(biāo)按鈕時(shí)發(fā)生。 MouseEnter在鼠標(biāo)指針進(jìn)入此元素的邊界時(shí)發(fā)生。 MouseLeave在鼠標(biāo)指針離開此元素的邊界時(shí)發(fā)生。 MouseLeftButt

29、onDown在鼠標(biāo)指針位于此元素上并且按下鼠標(biāo)左鍵時(shí)發(fā)生。 MouseRightButtonDown在鼠標(biāo)指針位于此元素上并且按下鼠標(biāo)右鍵時(shí)發(fā)生。 MouseUp在鼠標(biāo)指針位于此元素上并且松開任意鼠標(biāo)按鈕時(shí)發(fā)生。 MouseWheel在鼠標(biāo)指針位于此元素上并且用戶滾動(dòng)鼠標(biāo)滾輪時(shí)發(fā)生。 TextInput在此元素以設(shè)備無關(guān)模式獲取文本時(shí)發(fā)生。 TouchDown當(dāng)懸停在此元素上方的手指觸摸屏幕時(shí)發(fā)生。 TouchEnter在觸摸屏輸入從此元素邊界外部移動(dòng)到其內(nèi)部時(shí)發(fā)生。 TouchLeave在觸摸屏輸入從此元素邊界內(nèi)部移動(dòng)到其外部時(shí)發(fā)生。 常用控件標(biāo)簽控件(Label)為控件提供運(yùn)行時(shí)信息或說明

30、性文字,通常用于顯示靜態(tài)文本。 文本框控件(TextBox)用于接收用戶的輸入或者顯示文本。常用的事件是TextChanged事件,當(dāng)框中的內(nèi)容發(fā)生改變時(shí)觸發(fā)列表框控件(ListBox)用于顯示供用戶選擇的選項(xiàng)列表,用戶可以從中選擇一項(xiàng)或多項(xiàng)SelectedIndexChanged事件和SelectedValueChanged事件。組合框控件(ComboBox)結(jié)合了文本框控件和列表框控件的功能,同時(shí)具有這兩類控件的功能命令按鈕控件(Button)命令按鈕控件允許用戶通過單擊來響應(yīng)各種操作常用的事件是Click事件窗體切換與參數(shù)傳遞窗體的打開與關(guān)閉Form frm1=new Form();fr

31、m1.ShowDialog();/模態(tài)方式顯示,有返回值frm1.Show();/非模態(tài)方式,無返回值frm1.Close();* 模態(tài)顯示指程序中只有當(dāng)前窗體能與用戶交互窗體間的參數(shù)傳遞重載窗體類的構(gòu)造函數(shù),允許在實(shí)例化時(shí)傳遞參數(shù)主窗體向從窗體傳遞參數(shù)定義全局類或者變量消息框與對(duì)話框消息框MessageBox.Show(內(nèi)容,標(biāo)題,按鈕,圖標(biāo))MessageBoxButtons 枚舉值MessageBoxIcon 枚舉值對(duì)話框通用對(duì)話框 CommonDialog 顏色對(duì)話框 ColorDialog字體對(duì)話框 FontDialog打開文件對(duì)話框 OpenFileDialog保存文件對(duì)話框 Sa

32、veFileDialog菜單設(shè)計(jì)與編程菜單是可視化編程的重要組成部分,通常分為下拉菜單(包括主菜單和子菜單)和快捷菜單兩種。主菜單:顯示在菜單欄上、窗體運(yùn)行時(shí)始終顯示的菜單。子菜單:主菜單下面的菜單。下拉菜單使用類MenuStrip創(chuàng)建快捷菜單:?jiǎn)螕羰髽?biāo)右鍵彈出的菜單快捷菜單使用類ContextMenuStrip創(chuàng)建多文檔界面(MDI)編程MDI(Multiple-Document Interface):多文檔界面,由一個(gè)父窗體和多個(gè)子窗體組成。MDI窗體允許同時(shí)打開多個(gè)子窗體,是一種能夠同時(shí)處理兩個(gè)或兩個(gè)以上窗體的界面形式。創(chuàng)建MDI窗體的步驟:MDI父窗體的創(chuàng)建MDI子窗體的創(chuàng)建從父窗體中

33、調(diào)用子窗體。 實(shí)現(xiàn)方法父窗體創(chuàng)建Form1.IsMdiContainer=True;調(diào)用子窗體Form2 frm=new Form2();frm.MdiParent=this;frm.Show();窗體動(dòng)作frm.Show();/打開新窗體frm.Hide();/隱藏窗體frm. Activate();/激活已打開的窗體frm.Close();/關(guān)閉窗體MDI的窗體傳值技術(shù)以及細(xì)節(jié)處理調(diào)用窗體時(shí),利用已配置的參數(shù)進(jìn)行傳傎通過類屬性進(jìn)行傳傎防止重復(fù)打開子窗口設(shè)定子窗體排列方式任務(wù)2:C# Windows編程實(shí)踐設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算器基本要求:實(shí)現(xiàn)四則運(yùn)算擴(kuò)展1:實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換、按位運(yùn)算以及科學(xué)計(jì)算等

34、擴(kuò)展2:實(shí)現(xiàn)常用的數(shù)學(xué)函數(shù)計(jì)算(調(diào)用Math類)設(shè)計(jì)一個(gè)帶菜單欄和狀態(tài)欄的多窗體界面實(shí)驗(yàn)提示新建窗體程序工程,設(shè)定窗體屬性放置輸入輸出控件(按鈕/標(biāo)簽/文本框)并適當(dāng)布局為不同的按鈕編寫響應(yīng)方法(事件函數(shù)),注意按鈕的分類09數(shù)字鍵(將當(dāng)前按鍵值拼接到之前的值,注意前值為0情況)運(yùn)算符號(hào)鍵(保存當(dāng)前數(shù)值,標(biāo)記按下的符號(hào))等號(hào)鍵(讀取緩存的運(yùn)算符和操作數(shù),轉(zhuǎn)化成數(shù)值,選擇運(yùn)算方法,輸出運(yùn)算結(jié)果)數(shù)字鍵的代碼復(fù)用:使用帶參數(shù)的方法實(shí)現(xiàn)封裝和數(shù)據(jù)隱藏,類的UML圖UML是一種建模語(yǔ)言Unified Modeling Language類圖由類名、屬性和方法組成(+) 指示public(-) 指示pri

35、vate(#)指示protected用( : ) 指示返回類型數(shù)據(jù)隱藏用屬性代替可見字段復(fù)雜操作使用方法繼承的UML表示UML將繼承表示為一條線,并有一個(gè)箭頭指向超類帶箭頭的虛線指示一個(gè)接口類的組合類的聚集聚合(空心)復(fù)合(實(shí)心)類的關(guān)聯(lián)(雙向)類的關(guān)聯(lián)(單向)多態(tài) polymorphism多態(tài)類似的對(duì)象可以采用不同的方式對(duì)相同的消息作出響應(yīng)父類中定義的屬性和方法被子類繼承后,可以具有不同的數(shù)據(jù)類型或者表現(xiàn)出不同的行為多態(tài)的實(shí)現(xiàn)覆蓋(overriding)是子類實(shí)現(xiàn)對(duì)父類實(shí)現(xiàn)的替換第五章 字符串與字符編碼5.1 String類在C#中,字符串類型將一組字符視為一個(gè)整體進(jìn)行處理。C#使用關(guān)鍵字s

36、tring來定義字符串類型,對(duì)應(yīng)著.NET類庫(kù)的System.String類。System.String/zh-cn/library/system.string(v=VS.80).aspx常用字符串操作方法方法作用Compare比較兩個(gè)指定的String對(duì)象CompareTo將此實(shí)例與指定的對(duì)象String進(jìn)行比較,并返回二者相對(duì)值的指示Concat連接String的一個(gè)或多個(gè)實(shí)例,或Object的一個(gè)或多個(gè)實(shí)例的值的String表示形式Contains返回一個(gè)值,該值指示指定的 String 對(duì)象是否出現(xiàn)在此字符串中。Copy創(chuàng)建一個(gè)與指定的String具有相同值的String的新實(shí)例Cop

37、yTo將指定數(shù)目的字符從此實(shí)例中的指定位置復(fù)制到Unicode字符數(shù)組中的指定位置Equals確定兩個(gè)String對(duì)象是否具有相同的值Format將指定的String中的每個(gè)格式項(xiàng)替換為相應(yīng)對(duì)象的值的文本等效項(xiàng)IndexOf報(bào)告String或一個(gè)或多個(gè)字符在此字符串中的第一個(gè)匹配項(xiàng)的索引IndexOfAny報(bào)告指定Unicode字符數(shù)組中的任意字符在此實(shí)例中第一個(gè)匹配項(xiàng)的索引Insert在此實(shí)例中的指定索引位置插入一個(gè)指定的String實(shí)例LastIndexOf報(bào)告指定的Unicode字符或String在此實(shí)例中的最后一個(gè)匹配項(xiàng)的索引位置op_Equality確定兩個(gè)指定的String對(duì)象是否

38、具有同一值op_Inequality確定兩個(gè)指定的String對(duì)象是否具有不同的值常用字符串操作方法PadLeft右對(duì)齊字符,在左邊用空格或指定的Unicode字符填充以達(dá)定的總長(zhǎng)度PadRight左對(duì)齊字符,在右邊用空格或指定的Unicode字符填充以達(dá)到指定的總長(zhǎng)度ReferenceEquals確定指定的Object實(shí)例是否是相同的實(shí)例。(從Object繼承)Remove從此實(shí)例中刪除指定個(gè)數(shù)的字符Replace將指定Unicode字符或String的所有匹配項(xiàng)替換為其他指定的Unicode字符或StringStartsWith確定String實(shí)例的開頭是否與指定的字符串匹配Substri

39、ng從此實(shí)例檢索子字符串ToCharArray將此實(shí)例中的字符復(fù)制到 Unicode 字符數(shù)組ToLower返回此String轉(zhuǎn)換為小寫形式的副本ToString將此實(shí)例的值轉(zhuǎn)換為StringToUpper返回此String轉(zhuǎn)換為大寫形式的副本Trim從此實(shí)例的開始位置和末尾移除一組指定字符的所有匹配項(xiàng)TrimEnd從此實(shí)例的結(jié)尾移除數(shù)組中指定的一組字符的所有匹配項(xiàng)TrimStart從此實(shí)例的開頭移除數(shù)組中指定的一組字符的所有匹配項(xiàng)5.2 StringBuilder類與String的區(qū)別與聯(lián)系String對(duì)象串聯(lián)操作總是用現(xiàn)有字符串和新數(shù)據(jù)創(chuàng)建新的對(duì)象StringBuilder對(duì)象維護(hù)一個(gè)緩沖

40、區(qū),以便容納新數(shù)據(jù)的串聯(lián)主要方法Remove方法Replace方法Insert方法Append方法AppendLine方法AppendFormat方法System.Text.StringBuilder/zh-cn/library/system.text.stringbuilder.aspx5.3 字符集與字符編碼計(jì)算機(jī)的字符集/view/51987.htm主要字符集ASCII 字符集,單字節(jié)美國(guó),1967年關(guān)于:/history/id=38460629GB2312 字符集,雙字節(jié)中國(guó),1981年BIG5 字符集,雙字節(jié)中國(guó)臺(tái)灣五公司,1984年GB18030 字符集,單/雙/四字節(jié)中國(guó),200

41、0年Unicode字符集,0-0 x10FFFF,Unicode 學(xué)術(shù)學(xué)會(huì),1994年UTF-8,8位變長(zhǎng)UTF-16,16位無符號(hào)UTF-32,32位無符號(hào)/view/40801.htmASCII碼表Encoding類.NET Framework 提供以下Encoding類的實(shí)現(xiàn)以支持當(dāng)前 Unicode 編碼和其他編碼ASCIIEncoding 將 Unicode 字符編碼為單個(gè) 7 位 ASCII 字符。UTF7Encoding 使用 UTF-7 編碼對(duì) Unicode 字符進(jìn)行編碼。UTF8Encoding 使用 UTF-8 編碼對(duì) Unicode 字符進(jìn)行編碼。UnicodeEnco

42、ding 使用 UTF-16 編碼對(duì) Unicode 字符進(jìn)行編碼。UTF32Encoding 使用 UTF-32 編碼對(duì) Unicode 字符進(jìn)行編碼。System.Text.Encoding/zh-cn/library/system.text.encoding(VS.80).aspx字符與字符編碼的轉(zhuǎn)換將文符串轉(zhuǎn)換成字節(jié)數(shù)組Encoding.ASCII.GetBytes(String)將字節(jié)數(shù)組轉(zhuǎn)換成字符串Encoding.ASCII.GetString(Byte)/散列值、密文直接轉(zhuǎn)換將出現(xiàn)亂碼5.4 字節(jié)(數(shù)組)可視化處理方法Base64編碼是一種基于64個(gè)(26=64)可打印字符來表

43、示二進(jìn)制數(shù)據(jù)的表示方法。常用于處理文本數(shù)據(jù)的場(chǎng)合,表示、傳輸、存儲(chǔ)二進(jìn)制數(shù)據(jù),如加解密及網(wǎng)絡(luò)編碼??梢詫?3*8 bit 表示為 4*6 bit。關(guān)于:/view/1485202.htm實(shí)現(xiàn)Convert.ToBase64String(Byte)Convert.FromBase64String(String)字節(jié)的16進(jìn)制顯示:(散列值常用的表示法)tmpi.ToString(X2)/tmp為字節(jié)數(shù)組任務(wù)4:1.從身份證號(hào)碼中提取信息輸入身份證號(hào)從中提取出地區(qū)碼、出生日期、性別等信息2.設(shè)計(jì)字符編碼轉(zhuǎn)換器實(shí)現(xiàn)字符與Base64字符的互轉(zhuǎn)實(shí)現(xiàn)字符的16進(jìn)制顯示及其相互轉(zhuǎn)換基于不同的字符編碼,將字

44、符轉(zhuǎn)換成16進(jìn)制顯示并比較3.選擇一張照片,將其顯示為Base64文本 *第六章 密碼術(shù)基礎(chǔ)與網(wǎng)絡(luò)編程6.1 密碼術(shù)基礎(chǔ) 網(wǎng)絡(luò)信息安全信息存儲(chǔ)安全和信息傳輸安全。信息傳輸安全是指如何保證信息在網(wǎng)絡(luò)傳輸?shù)倪^程中不被泄露與不被攻擊。保證網(wǎng)絡(luò)中信息安全的主要技術(shù)是數(shù)據(jù)的加密與解密。加密與解密在密碼學(xué)中,將源信息稱為明文;對(duì)明文進(jìn)行某種變換后生成的隱藏了其真實(shí)內(nèi)容的信息稱為密文;將明文變換為密文的過程稱為加密;將密文經(jīng)過逆變換恢復(fù)成明文的過程稱為解密。計(jì)算機(jī)網(wǎng)絡(luò)加密技術(shù)鏈路加密鏈路加密是目前常用的一種加密方法,通常用硬件在網(wǎng)絡(luò)層以下的物理層和數(shù)據(jù)鏈路層中實(shí)現(xiàn),它用于保護(hù)通信節(jié)點(diǎn)間的數(shù)據(jù)。 節(jié)點(diǎn)加密 節(jié)

45、點(diǎn)加密是鏈路加密的改進(jìn),其目的是克服鏈路加密在節(jié)點(diǎn)處易遭非法存取的缺點(diǎn)。在協(xié)議傳輸層上進(jìn)行加密,是對(duì)源點(diǎn)和目標(biāo)節(jié)點(diǎn)間傳輸?shù)臄?shù)據(jù)進(jìn)行加密保護(hù)。 端-端加密網(wǎng)絡(luò)層以上的加密,通常稱為端-端加密。端-端加密是面向網(wǎng)絡(luò)高層主體進(jìn)行的加密,即在協(xié)議表示層上對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密,而不對(duì)下層協(xié)議信息加密。協(xié)議信息以明文形式傳輸,用戶數(shù)據(jù)在中間節(jié)點(diǎn)不需要加密。 數(shù)據(jù)加密模型消息源加密器解密器消息宿密鑰源傳輸或存儲(chǔ)安全信道數(shù)據(jù)加密表達(dá)式加密:C=En(Ke,P)P:信息明文K:密鑰En:算法C:信息密文解密:P=Dn(Kd,C)傳統(tǒng)加密技術(shù)替代密碼(字符操作)定義:明文中的每一個(gè)字符被替換成密文中的另外一個(gè)字符

46、簡(jiǎn)單替代密碼 凱撒密碼(循環(huán)移位密碼):把明文中所有的字母都用它右邊的第k 個(gè)字母替代,并認(rèn)為Z后邊又是A ROT13:用字母表里am的字符來代替nz,用nz的字符來代替 am字符Eg: “v ybir lbh!” ? 多表替代密碼(明文:how are you,密碼:your)P=HOWAREYOU K=YOURYOURY Ek (P)=FCQRPSSFS 傳統(tǒng)密碼技術(shù)簡(jiǎn)單異或(按位操作)00=0 01=1 10=1 11=0 加密:1001 1100 = 0101解密:0101 1100 = 1001對(duì)稱密碼技術(shù)非對(duì)稱密碼技術(shù)密碼個(gè)數(shù)1個(gè)2個(gè)算法速度較快較慢算法對(duì)稱性對(duì)稱,解密密鑰可以從加

47、密密鑰中推算出來不對(duì)稱,解密密鑰不能從加密密鑰中推算出來主要應(yīng)用領(lǐng)域數(shù)據(jù)的加密和解密對(duì)數(shù)據(jù)進(jìn)行數(shù)字簽名、確認(rèn)、鑒定、密鑰管理和數(shù)字封裝等對(duì)稱加密技術(shù)加密和解密過程均采用同一密鑰 DES與AES非對(duì)稱加密技術(shù)加密和解密過程采用不同的密鑰RSA與ECC現(xiàn)代加密技術(shù)對(duì)稱加密技術(shù)DES(數(shù)據(jù)加密算法,1976)64位分組加密AES(高級(jí)加密算法,2001)128位分組加密128/192/256位密鑰初始變換64位的密文逆初始變換64位明文64位的密鑰加密變換16輪子密鑰生成DES原理:接收者將一對(duì)密碼中的一個(gè)(公鑰)公開,另一個(gè)秘密保存發(fā)送者使用接收者的公鑰加密信息接收者使用私鑰解密出原文數(shù)學(xué)模型:C

48、=E(Kp, P)P=D(Ks, C)特點(diǎn):加密密碼(公鑰)Kp是公開信息,而解密密鑰(私鑰) Ks是保密的。公鑰和私鑰相互關(guān)聯(lián),但不可能根據(jù)公鑰計(jì)算出私鑰。 非對(duì)稱加密技術(shù)HTTPS:電子信封技術(shù)的具體應(yīng)用一對(duì)矛盾對(duì)稱加密:速度快,密鑰管理困難非對(duì)稱加密:速度慢,解決密鑰管理問題電子信封技術(shù)HTTPS(安全的HTTP通道,在HTTP下加入SSL層):客戶端向服務(wù)器發(fā)送請(qǐng)求(包括版本、算法等)服務(wù)器向客戶端發(fā)送響應(yīng)以及證書(含公鑰)客戶端產(chǎn)生對(duì)稱密鑰,用服務(wù)器公鑰加密后發(fā)送服務(wù)器用私鑰解密,得到對(duì)稱密鑰雙方確認(rèn)該對(duì)稱密鑰后,進(jìn)行保密通信(保密性)數(shù)據(jù)的完整性驗(yàn)證:報(bào)文鑒別技術(shù) Hash函數(shù)也稱

49、消息摘要(MD:Message Digest),將可變長(zhǎng)度的報(bào)文M作為單向散列函數(shù)的輸入,然后得出一個(gè)固定長(zhǎng)度的標(biāo)志 H(M),稱為Hash值(哈希值)表達(dá)式:MD=H(M)Hash算法MD算法(MD5,128位)SHA算法(SHA-1,160位)HMAC算法報(bào)文鑒別碼 MAC (Message Authentication Code)用一個(gè)密鑰生成的一個(gè)小的數(shù)據(jù)塊追加在報(bào)文的后面。表達(dá)式:MAC = F(K,M)數(shù)據(jù)的不可抵賴性:數(shù)字簽名技術(shù)數(shù)字簽名就是為了達(dá)到簽名的效果,附加在數(shù)據(jù)單元上的一些數(shù)據(jù)。數(shù)字簽名的要素:簽名信息能被接收者讀取發(fā)送者事后不能抵賴(信息內(nèi)容及簽名事實(shí))接受者不能偽造

50、簽名數(shù)字簽名的實(shí)現(xiàn)產(chǎn)生信息原文的摘要用私鑰對(duì)摘要進(jìn)行加密(簽名)將原文和簽名一起傳輸接收者用發(fā)送者的公鑰解密簽名得到摘要產(chǎn)生信息原文的摘要并與上述簽名摘要比較數(shù)字簽名技術(shù)示意圖6.2 .NET密碼術(shù)編程基礎(chǔ) System.Security.Cryptography/zh-cn/library/system.security.cryptography.aspx提供包括安全的數(shù)據(jù)加密與解密、確保數(shù)據(jù)的完整性,以及處理數(shù)字簽名和證書等加密服務(wù)核心加密類分為三層,如右圖6.2.1 哈希(散列)算法及編程哈希函數(shù)是現(xiàn)代密碼系統(tǒng)的基礎(chǔ)。哈希函數(shù)將任意長(zhǎng)度的二進(jìn)制字符串映射為固定長(zhǎng)度的小二進(jìn)制字符串(稱為哈

51、希值/散列值)。哈希值用作表示大量數(shù)據(jù)的固定大小的唯一值。哈希函數(shù)通常用于數(shù)字簽名和保持?jǐn)?shù)據(jù)完整性等。哈希函數(shù)的特點(diǎn):在計(jì)算時(shí)不可能將兩個(gè)不同的輸入通過哈希算法獲取相同的值。如果相應(yīng)的數(shù)據(jù)匹配,則兩個(gè)數(shù)據(jù)集的哈希應(yīng)該匹配。數(shù)據(jù)的少量更改會(huì)在哈希值中產(chǎn)生不可預(yù)知的大量更改。哈希算法的編程實(shí)現(xiàn).NET 哈希算法類都繼承自HashAlgorithm抽象類。類說明KeyedHashAlgorithm顯示所有加密哈希算法實(shí)現(xiàn)均必須從中派生的抽象類。MD5CryptoServiceProvider使用加密服務(wù)提供程序 (CSP) 提供的實(shí)現(xiàn),計(jì)算輸入數(shù)據(jù)的 MD5 哈希值。SHA1CryptoServic

52、eProvider使用加密服務(wù)提供程序 (CSP) 提供的實(shí)現(xiàn)計(jì)算輸入數(shù)據(jù)的 SHA1 哈希值。MD5表示MD5哈希算法的所有實(shí)現(xiàn)均從中繼承的抽象類。RIPEMD160表示 MD160 哈希算法的所有實(shí)現(xiàn)均從中繼承的抽象類。SHA1計(jì)算輸入數(shù)據(jù)的SHA1哈希值。SHA256計(jì)算輸入數(shù)據(jù)的SHA256哈希值。SHA384計(jì)算輸入數(shù)據(jù)的SHA384哈希值。SHA512計(jì)算輸入數(shù)據(jù)的SHA512哈希值。哈希(散列)編程實(shí)例/獲取字符編碼byte aaa = Encoding.UTF8.GetBytes(str);/使用MD5CryptoServiceProvider類創(chuàng)建md5對(duì)象MD5Crypto

53、ServiceProvider md = new MD5CryptoServiceProvider();/也可以使用MD5類創(chuàng)建md5對(duì)象/MD5 md = MD5.Create();/計(jì)算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 對(duì)稱加密算法及編程特點(diǎn):算法公開、計(jì)算量小、加密速度快、加密效率高。主要算法:DES、3DE

54、S、RC5、AES等分組密碼的工作模式電子密碼本 (electronic codebook mode,ECB )密碼分組鏈接 (cipher block chaining, CBC )密碼反饋 (cipher feedback, CFB)輸出反饋 (output feedback, OFB)計(jì)數(shù)器 (counter, CTR )算法工作模式中的初始向量 IVSymmetricAlgorithm類 (留意CBC,Key,IV)/zh-cn/library/system.security.cryptography.symmetricalgorithm(v=VS.80).aspx對(duì)稱加密的主要算法(

55、一)DEA/DES數(shù)據(jù)加密算法(Data Encryption Algorithm,DEA),數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard,DES)使用一個(gè)56位的密鑰以及附加的8位奇偶校驗(yàn)位,產(chǎn)生最大64位的分組大小3DES,Triple DES三重?cái)?shù)據(jù)加密算法(Triple Data Encryption Algorithm,TDEA),用雙長(zhǎng)度(128位)密鑰K=(KL|KR)將64位明文數(shù)據(jù)塊(分組)進(jìn)行3次DES加密/解密。加密:Y = DES(KL)DES-1(KR)DES(KLX)解密:X = DES-1(KL)DES (KR) DES-1(KLY)對(duì)稱加密的主

56、要算法(二)AES加密算法高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard),又稱Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。AES加密數(shù)據(jù)塊分組長(zhǎng)度必須為128位,密鑰長(zhǎng)度可以是128、192或256位加解密處理的參數(shù)密鑰的長(zhǎng)度與填充初始化向量的長(zhǎng)度與填充:長(zhǎng)度與數(shù)據(jù)塊分組長(zhǎng)度一致SymmetricAlgorithm 的主要成員屬性描述BlockSize 獲取或設(shè)置加密操作的塊大?。ㄒ晕粸閱挝唬〧eedbackSize 獲取或設(shè)置加密操作的反饋大小(以位為單位)IV 獲取或設(shè)置對(duì)稱算法的初始化向量 (IV)Key 獲取或設(shè)置對(duì)稱算法的密鑰KeySize

57、 獲取或設(shè)置對(duì)稱算法所用密鑰的大?。ㄒ晕粸閱挝唬㎜egalBlockSizes 獲取對(duì)稱算法支持的塊大小(以位為單位)LegalKeySizes 獲取對(duì)稱算法支持的密鑰大?。ㄒ晕粸閱挝唬㎝ode 獲取或設(shè)置對(duì)稱算法的運(yùn)算模式Padding 獲取或設(shè)置對(duì)稱算法中使用的填充模式方法描述Clear 釋放由 SymmetricAlgorithm 類使用的所有資源Create 創(chuàng)建用于執(zhí)行對(duì)稱算法的加密實(shí)例CreateDecryptor 用指定的密鑰和初始化向量創(chuàng)建一個(gè)對(duì)稱解密器對(duì)象 CreateEncryptor 用指定的密鑰和初始化向量創(chuàng)建一個(gè)對(duì)稱加密器對(duì)象 GenerateIV 為對(duì)稱加密算法生成

58、一個(gè)隨機(jī)的初始化向量(IV),并重寫IV屬性中所存儲(chǔ)的值 GenerateKey 為對(duì)稱加密算法生成一個(gè)隨機(jī)密鑰(Key),并重寫Key屬性的值 ValidKeySize 確定指定的密鑰大小對(duì)當(dāng)前算法是否有效 對(duì)稱加密算法及編程.NET 在 SymmetricAlgorithm 類的基礎(chǔ)上,給出了抽象算法實(shí)現(xiàn)類DES、RC2、TripleDES和Rijndael,并在此基礎(chǔ)上給出了具體加密方案實(shí)現(xiàn)類。AES加密編程實(shí)現(xiàn)Byte bKey = Encoding.UTF8.GetBytes(Keystr.PadRight(32); Byte bIV = Encoding.UTF8.GetBytes

59、(IVstr.PadRight(16); Byte Data = Encoding.UTF8.GetBytes(Datastr); /創(chuàng)建內(nèi)存流MemoryStream ms = new MemoryStream();/創(chuàng)建AES對(duì)象,并內(nèi)存流對(duì)象包裝成加密器對(duì)象Rijndael Aes = Rijndael.Create();CryptoStream cs = new CryptoStream(ms, Aes.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write);/明文數(shù)據(jù)寫入加密器cs.Write(Data, 0, Data.Length)

60、;cs.FlushFinalBlock();/返回密文流Byte Cryptograph = ms.ToArray();string Outstr = Convert.ToBase64String(Cryptograph);AES解密編程實(shí)現(xiàn)Byte bKey = Encoding.UTF8.GetBytes(Keystr.PadRight(32); Byte bIV = Encoding.UTF8.GetBytes(IVstr.PadRight(16); Byte Data = Convert.FromBase64String(EnDatastr); /創(chuàng)建內(nèi)存流,并存入密文MemorySt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論