第6章_網(wǎng)絡(luò)數(shù)據(jù)加密與解密(c_Sharp_ 網(wǎng)絡(luò)應(yīng)用高級(jí)編程)_第1頁
第6章_網(wǎng)絡(luò)數(shù)據(jù)加密與解密(c_Sharp_ 網(wǎng)絡(luò)應(yīng)用高級(jí)編程)_第2頁
第6章_網(wǎng)絡(luò)數(shù)據(jù)加密與解密(c_Sharp_ 網(wǎng)絡(luò)應(yīng)用高級(jí)編程)_第3頁
第6章_網(wǎng)絡(luò)數(shù)據(jù)加密與解密(c_Sharp_ 網(wǎng)絡(luò)應(yīng)用高級(jí)編程)_第4頁
第6章_網(wǎng)絡(luò)數(shù)據(jù)加密與解密(c_Sharp_ 網(wǎng)絡(luò)應(yīng)用高級(jí)編程)_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第第6 6章章 網(wǎng)絡(luò)數(shù)據(jù)加密與解密網(wǎng)絡(luò)數(shù)據(jù)加密與解密6.1 對(duì)稱加密對(duì)稱加密 6.2 不對(duì)稱加密不對(duì)稱加密 6.3 通過網(wǎng)絡(luò)傳遞加密數(shù)據(jù)通過網(wǎng)絡(luò)傳遞加密數(shù)據(jù) 6.4 Hash算法與數(shù)字簽名算法與數(shù)字簽名 26.1 對(duì)稱加密對(duì)稱加密u 對(duì)稱加密也稱為私鑰加密,采用私鑰算法,對(duì)稱加密也稱為私鑰加密,采用私鑰算法,加密和解密數(shù)據(jù)使用同一個(gè)密鑰。加密和解密數(shù)據(jù)使用同一個(gè)密鑰。 u 私鑰算法以塊為單位加密數(shù)據(jù),一次加密私鑰算法以塊為單位加密數(shù)據(jù),一次加密一個(gè)數(shù)據(jù)塊。一個(gè)數(shù)據(jù)塊。 u .NET類庫使用的私鑰算法有類庫使用的私鑰算法有RC2、DES、TripleDES和和Rijndael。這些算法通過加密

2、將。這些算法通過加密將n字字節(jié)的輸入塊轉(zhuǎn)換為加密字節(jié)的輸出塊。如果要節(jié)的輸入塊轉(zhuǎn)換為加密字節(jié)的輸出塊。如果要加密或解密字節(jié)序列,必須逐塊進(jìn)行。加密或解密字節(jié)序列,必須逐塊進(jìn)行。 3u 為了保證數(shù)據(jù)的安全,為了保證數(shù)據(jù)的安全,.NET基類庫中提供的基類庫中提供的私鑰算法類使用稱作密碼塊鏈(私鑰算法類使用稱作密碼塊鏈(CBC,Cipher Block Chaining)的鏈模式,算法使用一個(gè)密鑰和)的鏈模式,算法使用一個(gè)密鑰和一個(gè)初始化向量(一個(gè)初始化向量(IV,Initialization Vector)對(duì)數(shù))對(duì)數(shù)據(jù)執(zhí)行加密轉(zhuǎn)換。密鑰和初始化向量據(jù)執(zhí)行加密轉(zhuǎn)換。密鑰和初始化向量IV一起決定一起決

3、定如何加密數(shù)據(jù),以及如何將數(shù)據(jù)解密為原始數(shù)據(jù)。如何加密數(shù)據(jù),以及如何將數(shù)據(jù)解密為原始數(shù)據(jù)。通信雙方都必須知道這個(gè)密鑰和初始化向量才能通信雙方都必須知道這個(gè)密鑰和初始化向量才能夠加密和解密數(shù)據(jù)。夠加密和解密數(shù)據(jù)。 6.1 對(duì)稱加密(續(xù))對(duì)稱加密(續(xù))4u 對(duì)稱加密算法的優(yōu)點(diǎn)是保密強(qiáng)度高,加對(duì)稱加密算法的優(yōu)點(diǎn)是保密強(qiáng)度高,加、解解密速度快,適合加密大量數(shù)據(jù)。攻擊者如果對(duì)加密速度快,適合加密大量數(shù)據(jù)。攻擊者如果對(duì)加密后的數(shù)據(jù)進(jìn)行破譯,惟一的辦法就是對(duì)每個(gè)可密后的數(shù)據(jù)進(jìn)行破譯,惟一的辦法就是對(duì)每個(gè)可能的密鑰執(zhí)行窮舉搜索。而采用這種加密技術(shù),能的密鑰執(zhí)行窮舉搜索。而采用這種加密技術(shù),即使使用最快的計(jì)算機(jī)

4、執(zhí)行這種搜索,耗費(fèi)的時(shí)即使使用最快的計(jì)算機(jī)執(zhí)行這種搜索,耗費(fèi)的時(shí)間也相當(dāng)長。如果使用較大的密鑰,破譯將會(huì)更間也相當(dāng)長。如果使用較大的密鑰,破譯將會(huì)更加困難。加困難。 6.1 對(duì)稱加密(續(xù))對(duì)稱加密(續(xù))5u 在在.NET Framework中,公共語言運(yùn)行時(shí)中,公共語言運(yùn)行時(shí)CLR使用面向流的設(shè)計(jì)實(shí)現(xiàn)對(duì)稱加密,該設(shè)計(jì)的核心使用面向流的設(shè)計(jì)實(shí)現(xiàn)對(duì)稱加密,該設(shè)計(jì)的核心是是CryptoStream,實(shí)現(xiàn),實(shí)現(xiàn)CryptoStream的任何被加的任何被加密的對(duì)象都可以和實(shí)現(xiàn)密的對(duì)象都可以和實(shí)現(xiàn)Stream的任何對(duì)象鏈接起的任何對(duì)象鏈接起來。實(shí)現(xiàn)對(duì)稱加密算法的類有四種:來。實(shí)現(xiàn)對(duì)稱加密算法的類有四種:D

5、ESCryptoServiceProvider RC2CryptoServiceProvider RijndaelManaged TripleDESCryptoServiceProvider 6.1 對(duì)稱加密(續(xù))對(duì)稱加密(續(xù))6四種對(duì)稱加密類的主要特點(diǎn)四種對(duì)稱加密類的主要特點(diǎn) 類可用密鑰長度(bit)加密算法DESCryptoServiceProvider64DES加密算法RC2CryptoServiceProvider40-128(每8位遞增)RC2加密算法RijndaelManaged128-256(每64位遞增)Rijndael加密算法TripleDESCryptoServicePro

6、vider128-192(每64位遞增)三重DES加密算法7TripleDES加密算法介紹加密算法介紹u TripleDES使用使用DES算法的三次連續(xù)迭代,支算法的三次連續(xù)迭代,支持從持從128位到位到192位(以位(以64位遞增)的密鑰長度,其位遞增)的密鑰長度,其安全性比安全性比DES更高。更高。DES的含義是的含義是Data Encryption Standard,是美國,是美國1977年公布的一種數(shù)據(jù)加密標(biāo)準(zhǔn),年公布的一種數(shù)據(jù)加密標(biāo)準(zhǔn),DES算法在各超市零售業(yè)、銀行自動(dòng)取款機(jī)、磁卡算法在各超市零售業(yè)、銀行自動(dòng)取款機(jī)、磁卡及及IC卡、加油站、高速公路收費(fèi)站等領(lǐng)域被廣泛卡、加油站、高速公

7、路收費(fèi)站等領(lǐng)域被廣泛應(yīng)用,以此來實(shí)現(xiàn)關(guān)鍵數(shù)據(jù)的保密,如信用卡持應(yīng)用,以此來實(shí)現(xiàn)關(guān)鍵數(shù)據(jù)的保密,如信用卡持卡人的卡人的PIN的加密傳輸,的加密傳輸,IC卡的認(rèn)證、金融交易數(shù)卡的認(rèn)證、金融交易數(shù)據(jù)包的據(jù)包的MAC校驗(yàn)等,均用到校驗(yàn)等,均用到DES算法。算法。DES算法算法具有非常高的安全性,到目前為止,除了用窮舉具有非常高的安全性,到目前為止,除了用窮舉搜索法對(duì)搜索法對(duì)DES算法進(jìn)行攻擊外,還沒有發(fā)現(xiàn)更有效算法進(jìn)行攻擊外,還沒有發(fā)現(xiàn)更有效的辦法。的辦法。 8 例例.使用使用TripleDES加密算法對(duì)輸入的字符加密算法對(duì)輸入的字符串進(jìn)行加密,并輸出加密后的字符串和解密后串進(jìn)行加密,并輸出加密后的字

8、符串和解密后的結(jié)果。的結(jié)果。 9namespace TdesEncryptExample public partial class FormTdesEncrypt : Form public FormTdesEncrypt() InitializeComponent(); private void FormTdesEncrypt_Load(object sender, EventArgs e) textBoxEncrypt.ReadOnly = true; textBoxDecrypt.ReadOnly = true; private void buttonOK_Click(object se

9、nder, EventArgs e) string str = textBoxInput.Text; if (str.Length = 0) MessageBox.Show(請(qǐng)輸入被加密的字符串請(qǐng)輸入被加密的字符串); return; 10/加密加密 try TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); /隨機(jī)生成密鑰隨機(jī)生成密鑰Key和初始化向量和初始化向量IV tdes.GenerateKey(); tdes.GenerateIV(); textBoxKey.Text = Encodi

10、ng.UTF8.GetString(tdes.Key); /得到加密后的字節(jié)流得到加密后的字節(jié)流 byte encryptedBytes = EncryptText(str, tdes.Key, tdes.IV); /顯示加密后的字符串顯示加密后的字符串 textBoxEncrypt.Text = Encoding.UTF8.GetString(encryptedBytes); /解密解密 string decryptString = DecryptText(encryptedBytes, tdes.Key, tdes.IV); /顯示解密后的字符串顯示解密后的字符串 textBoxDecry

11、pt.Text = decryptString; 11 catch (Exception err) MessageBox.Show(err.Message, 出錯(cuò)出錯(cuò)); private byte EncryptText(string str, byte Key, byte IV) /創(chuàng)建一個(gè)內(nèi)存流創(chuàng)建一個(gè)內(nèi)存流 MemoryStream memoryStream = new MemoryStream(); /使用傳遞的私鑰和使用傳遞的私鑰和IV創(chuàng)建加密流創(chuàng)建加密流 CryptoStream cryptoStream = new CryptoStream(memoryStream, new T

12、ripleDESCryptoServiceProvider().CreateEncryptor(Key, IV), CryptoStreamMode.Write); /將傳遞的字符串轉(zhuǎn)換為字節(jié)數(shù)組將傳遞的字符串轉(zhuǎn)換為字節(jié)數(shù)組 byte toEncrypt = Encoding.UTF8.GetBytes(str);12 try /將字節(jié)數(shù)組寫入加密流將字節(jié)數(shù)組寫入加密流,并清除緩沖區(qū)并清除緩沖區(qū) cryptoStream.Write(toEncrypt, 0, toEncrypt.Length); cryptoStream.FlushFinalBlock(); /得到加密后的字節(jié)數(shù)組得到加密后

13、的字節(jié)數(shù)組 byte encryptedBytes = memoryStream.ToArray(); return encryptedBytes; catch (CryptographicException err) throw new Exception(加密出錯(cuò):加密出錯(cuò): + err.Message); finally cryptoStream.Close(); memoryStream.Close(); 13 private string DecryptText(byte dataBytes, byte Key, byte IV) /根據(jù)加密后的字節(jié)數(shù)組創(chuàng)建一個(gè)內(nèi)存流根據(jù)加密后的字節(jié)

14、數(shù)組創(chuàng)建一個(gè)內(nèi)存流 MemoryStream memoryStream = new MemoryStream(dataBytes); /使用傳遞的私鑰、使用傳遞的私鑰、IV和內(nèi)存流創(chuàng)建解密流和內(nèi)存流創(chuàng)建解密流 CryptoStream cryptoStream = new CryptoStream(memoryStream, new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV), CryptoStreamMode.Read); /創(chuàng)建一個(gè)字節(jié)數(shù)組保存解密后的數(shù)據(jù)創(chuàng)建一個(gè)字節(jié)數(shù)組保存解密后的數(shù)據(jù) byte decryptByt

15、es = new bytedataBytes.Length; try /從解密流中將解密后的數(shù)據(jù)讀到字節(jié)數(shù)組中從解密流中將解密后的數(shù)據(jù)讀到字節(jié)數(shù)組中 cryptoStream.Read(decryptBytes, 0, decryptBytes.Length); /得到解密后的字符串得到解密后的字符串 string decryptedString = Encoding.UTF8.GetString(decryptBytes); return decryptedString; 14 catch (CryptographicException err) throw new Exception(解密

16、出錯(cuò):解密出錯(cuò): + err.Message); finally cryptoStream.Close(); memoryStream.Close(); 15u 不對(duì)稱加密也叫公鑰加密,這種技術(shù)使用不不對(duì)稱加密也叫公鑰加密,這種技術(shù)使用不同的加密密鑰與解密密鑰,是一種同的加密密鑰與解密密鑰,是一種“由已知加密由已知加密密鑰推導(dǎo)出解密密鑰在計(jì)算上是不可行的密鑰推導(dǎo)出解密密鑰在計(jì)算上是不可行的”密碼密碼體制。產(chǎn)生的主要原因有兩個(gè),一是對(duì)稱加密的體制。產(chǎn)生的主要原因有兩個(gè),一是對(duì)稱加密的密鑰分配問題,另一個(gè)是由于對(duì)數(shù)字簽名的需求。密鑰分配問題,另一個(gè)是由于對(duì)數(shù)字簽名的需求。 u 不對(duì)稱加密使用一個(gè)需

17、要保密的私鑰和一個(gè)不對(duì)稱加密使用一個(gè)需要保密的私鑰和一個(gè)可以對(duì)任何人公開的公鑰,即使用公鑰可以對(duì)任何人公開的公鑰,即使用公鑰/私鑰對(duì)私鑰對(duì)來加密和解密數(shù)據(jù)。公鑰和私鑰都在數(shù)學(xué)上相關(guān)來加密和解密數(shù)據(jù)。公鑰和私鑰都在數(shù)學(xué)上相關(guān)聯(lián),用公鑰加密的數(shù)據(jù)只能用私鑰解密,反之,聯(lián),用公鑰加密的數(shù)據(jù)只能用私鑰解密,反之,用私鑰加密的數(shù)據(jù)只能用公鑰解密。兩個(gè)密鑰對(duì)用私鑰加密的數(shù)據(jù)只能用公鑰解密。兩個(gè)密鑰對(duì)于通信會(huì)話都是惟一的。于通信會(huì)話都是惟一的。 6.2 不對(duì)稱加密(續(xù))不對(duì)稱加密(續(xù))16u 為什么不對(duì)稱加密更不容易被攻擊呢?為什么不對(duì)稱加密更不容易被攻擊呢?關(guān)鍵在于對(duì)私鑰的管理上。在對(duì)稱加密中,關(guān)鍵在于對(duì)

18、私鑰的管理上。在對(duì)稱加密中,發(fā)送方必須先將解密密鑰傳遞給接收方,接發(fā)送方必須先將解密密鑰傳遞給接收方,接收方才能解密。如果能避免通過不安全的網(wǎng)收方才能解密。如果能避免通過不安全的網(wǎng)絡(luò)傳遞私鑰,就可以解決這個(gè)問題。絡(luò)傳遞私鑰,就可以解決這個(gè)問題。6.2 不對(duì)稱加密(續(xù))不對(duì)稱加密(續(xù))17 使用不對(duì)稱加密算法加密數(shù)據(jù)后,私鑰使用不對(duì)稱加密算法加密數(shù)據(jù)后,私鑰不是發(fā)送方傳遞給接收方的,而是接收方先不是發(fā)送方傳遞給接收方的,而是接收方先生成一個(gè)公鑰生成一個(gè)公鑰/私鑰對(duì),在接收被加密的數(shù)私鑰對(duì),在接收被加密的數(shù)據(jù)前,先將該公鑰傳遞給發(fā)送方;注意,從據(jù)前,先將該公鑰傳遞給發(fā)送方;注意,從公鑰推導(dǎo)出私鑰是

19、不可能的,所以不怕通過公鑰推導(dǎo)出私鑰是不可能的,所以不怕通過網(wǎng)絡(luò)傳遞時(shí)被攻擊者截獲公鑰。發(fā)送方得到網(wǎng)絡(luò)傳遞時(shí)被攻擊者截獲公鑰。發(fā)送方得到此公鑰后,使用此公鑰加密數(shù)據(jù),再將加密此公鑰后,使用此公鑰加密數(shù)據(jù),再將加密后的數(shù)據(jù)通過網(wǎng)絡(luò)傳遞給接收方;接收方收后的數(shù)據(jù)通過網(wǎng)絡(luò)傳遞給接收方;接收方收到加密后的數(shù)據(jù)后,再用私鑰進(jìn)行解密。由到加密后的數(shù)據(jù)后,再用私鑰進(jìn)行解密。由于沒有傳遞私鑰,從而保證了數(shù)據(jù)安全性。于沒有傳遞私鑰,從而保證了數(shù)據(jù)安全性。 18u .NET Framework提供以下實(shí)現(xiàn)不對(duì)稱加密算提供以下實(shí)現(xiàn)不對(duì)稱加密算法的類:法的類:DSACryptoServiceProvider RSAC

20、ryptoServiceProvider 6.2 不對(duì)稱加密(續(xù))不對(duì)稱加密(續(xù))19u RSACryptoServiceProvider類使用加密服務(wù)類使用加密服務(wù)提供程序提供的提供程序提供的RSA算法實(shí)現(xiàn)不對(duì)稱加密和解密。算法實(shí)現(xiàn)不對(duì)稱加密和解密。加密服務(wù)提供程序加密服務(wù)提供程序CSP(Cryptographic Service Provider)是微軟在)是微軟在Windows操作系統(tǒng)中內(nèi)置的加操作系統(tǒng)中內(nèi)置的加密處理模塊,密處理模塊,RSACryptoServiceProvider類已經(jīng)對(duì)類已經(jīng)對(duì)其提供的相關(guān)接口和參數(shù)進(jìn)行了封裝,所以即使其提供的相關(guān)接口和參數(shù)進(jìn)行了封裝,所以即使我們不

21、知道我們不知道CSP內(nèi)部是如何實(shí)現(xiàn)的,也一樣可以使內(nèi)部是如何實(shí)現(xiàn)的,也一樣可以使用其提供的功能。用其提供的功能。RSACryptoServiceProvider類的使用方法類的使用方法 20 例例.利用不對(duì)稱加密算法加密指定的字符串,利用不對(duì)稱加密算法加密指定的字符串,并輸出加密和解密后的結(jié)果并輸出加密和解密后的結(jié)果 21namespace RsaEncryptExample public partial class FormRsaEncrypt : Form public FormRsaEncrypt() InitializeComponent(); this.Text = RSA加密解密加

22、密解密; textBoxEncrypt.ReadOnly = true; textBoxDecrypt.ReadOnly = true; 22 private void buttonOK_Click(object sender, EventArgs e) /使用默認(rèn)密鑰創(chuàng)建使用默認(rèn)密鑰創(chuàng)建RSACryptoServiceProvider對(duì)象對(duì)象 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); /顯示包含公鑰顯示包含公鑰/私鑰對(duì)的私鑰對(duì)的XML表示形式,如果只顯示公鑰,表示形式,如果只顯示公鑰,將參數(shù)改為將參數(shù)改為fa

23、lse即可即可 richTextBoxKeys.Text = rsa.ToXmlString(true); /將被加密的字符串轉(zhuǎn)換為字節(jié)數(shù)組將被加密的字符串轉(zhuǎn)換為字節(jié)數(shù)組 byte dataToEncrypt = Encoding.UTF8.GetBytes(textBoxInput.Text); try /得到加密后的字節(jié)數(shù)組得到加密后的字節(jié)數(shù)組 byte encryptedData = rsa.Encrypt(dataToEncrypt, false); textBoxEncrypt.Text = Encoding.UTF8.GetString(encryptedData); /得到解密后

24、的字節(jié)數(shù)組得到解密后的字節(jié)數(shù)組 byte decryptedData = rsa.Decrypt(encryptedData, false); textBoxDecrypt.Text = Encoding.UTF8.GetString(decryptedData); 23 catch (Exception err) MessageBox.Show(err.Message); 24u 雖然不對(duì)稱加密解決了用對(duì)稱加密傳遞消息雖然不對(duì)稱加密解決了用對(duì)稱加密傳遞消息必須傳遞密鑰的問題,但是由于不對(duì)稱加密無法必須傳遞密鑰的問題,但是由于不對(duì)稱加密無法使用流進(jìn)行處理,因此與對(duì)稱加密相比效率較低,使用流進(jìn)行

25、處理,因此與對(duì)稱加密相比效率較低,不適用于加密大量數(shù)據(jù)的場合。在實(shí)際應(yīng)用中,不適用于加密大量數(shù)據(jù)的場合。在實(shí)際應(yīng)用中,一般將兩種加密方法配合使用。其基本思想是:一般將兩種加密方法配合使用。其基本思想是:用不對(duì)稱加密算法加密對(duì)稱加密的密鑰,用對(duì)稱用不對(duì)稱加密算法加密對(duì)稱加密的密鑰,用對(duì)稱加密算法加密實(shí)際數(shù)據(jù)。加密算法加密實(shí)際數(shù)據(jù)。 6.3 通過網(wǎng)絡(luò)傳遞加密數(shù)據(jù)通過網(wǎng)絡(luò)傳遞加密數(shù)據(jù)25u 具體設(shè)計(jì)思路可以簡單描述為:具體設(shè)計(jì)思路可以簡單描述為:A和和B相互傳相互傳遞加密的數(shù)據(jù)前,遞加密的數(shù)據(jù)前,B首先生成一個(gè)不對(duì)稱加密算法首先生成一個(gè)不對(duì)稱加密算法使用的公鑰使用的公鑰/私鑰對(duì),假定公鑰為私鑰對(duì),假

26、定公鑰為publicKey,私鑰,私鑰為為privateKey,然后,然后B將公鑰將公鑰publicKey通過網(wǎng)絡(luò)傳通過網(wǎng)絡(luò)傳遞給遞給A;A接收到此公鑰后,根據(jù)此公鑰初始化不接收到此公鑰后,根據(jù)此公鑰初始化不對(duì)稱加密對(duì)象,并用此對(duì)象加密使用對(duì)稱加密算對(duì)稱加密對(duì)象,并用此對(duì)象加密使用對(duì)稱加密算法的密鑰法的密鑰key,并將加密后的密鑰,并將加密后的密鑰key通過網(wǎng)絡(luò)傳遞通過網(wǎng)絡(luò)傳遞給給B;這樣,;這樣,A和和B都有了一個(gè)共同使用的對(duì)稱加都有了一個(gè)共同使用的對(duì)稱加密的密鑰,然后雙方用此密鑰加密數(shù)據(jù),并將加密的密鑰,然后雙方用此密鑰加密數(shù)據(jù),并將加密后的數(shù)據(jù)傳遞給對(duì)方,對(duì)方收到加密后的數(shù)據(jù)密后的數(shù)據(jù)傳

27、遞給對(duì)方,對(duì)方收到加密后的數(shù)據(jù)后,再用密鑰后,再用密鑰key解密數(shù)據(jù)。解密數(shù)據(jù)。 6.3 通過網(wǎng)絡(luò)傳遞加密數(shù)據(jù)(續(xù))通過網(wǎng)絡(luò)傳遞加密數(shù)據(jù)(續(xù))26u 通過這種方式,在不安全的網(wǎng)絡(luò)上傳遞加密通過這種方式,在不安全的網(wǎng)絡(luò)上傳遞加密后的數(shù)據(jù)時(shí),雖然攻擊者可以截獲公鑰,但是由后的數(shù)據(jù)時(shí),雖然攻擊者可以截獲公鑰,但是由于用公鑰加密的數(shù)據(jù)只能用私鑰解密,而私鑰并于用公鑰加密的數(shù)據(jù)只能用私鑰解密,而私鑰并沒有通過網(wǎng)絡(luò)傳遞,因此攻擊者無法通過公鑰沒有通過網(wǎng)絡(luò)傳遞,因此攻擊者無法通過公鑰publicKey破譯加密后的密鑰破譯加密后的密鑰key,因此也無法破譯,因此也無法破譯加密的消息。加密的消息。u 6.3 通

28、過網(wǎng)絡(luò)傳遞加密數(shù)據(jù)(續(xù))通過網(wǎng)絡(luò)傳遞加密數(shù)據(jù)(續(xù))27 在實(shí)際應(yīng)用中,一般使用在實(shí)際應(yīng)用中,一般使用TCP協(xié)議通過網(wǎng)絡(luò)傳協(xié)議通過網(wǎng)絡(luò)傳輸數(shù)據(jù)。對(duì)于比較重要的數(shù)據(jù),必須進(jìn)行加密解輸數(shù)據(jù)。對(duì)于比較重要的數(shù)據(jù),必須進(jìn)行加密解密處理。一般實(shí)現(xiàn)方案為:密處理。一般實(shí)現(xiàn)方案為:1) 傳輸雙方均各自生成一個(gè)公鑰傳輸雙方均各自生成一個(gè)公鑰/私鑰對(duì)。私鑰對(duì)。 2) 通過通過TCP協(xié)議交換公鑰。協(xié)議交換公鑰。3) 雙方各自生成一個(gè)對(duì)稱加密用的私鑰,并雙方各自生成一個(gè)對(duì)稱加密用的私鑰,并使用對(duì)方的公鑰加密新創(chuàng)建的私鑰。使用對(duì)方的公鑰加密新創(chuàng)建的私鑰。 4) 雙方將加密后的對(duì)稱加密用的私鑰發(fā)送給雙方將加密后的對(duì)稱加密

29、用的私鑰發(fā)送給對(duì)方,以便對(duì)方利用此私鑰解密。對(duì)方,以便對(duì)方利用此私鑰解密。 5) 雙方使用對(duì)稱加密進(jìn)行會(huì)話。雙方使用對(duì)稱加密進(jìn)行會(huì)話。6.3 通過網(wǎng)絡(luò)傳遞加密數(shù)據(jù)(續(xù))通過網(wǎng)絡(luò)傳遞加密數(shù)據(jù)(續(xù))28數(shù)據(jù)加密與解密的網(wǎng)絡(luò)傳輸過程數(shù)據(jù)加密與解密的網(wǎng)絡(luò)傳輸過程 字節(jié)序列字節(jié)序列網(wǎng)絡(luò)流網(wǎng)絡(luò)流發(fā)送加密的數(shù)據(jù)發(fā)送加密的數(shù)據(jù)計(jì)算發(fā)送數(shù)據(jù)量計(jì)算發(fā)送數(shù)據(jù)量內(nèi)存流內(nèi)存流加密加密讀取加密的數(shù)據(jù)讀取加密的數(shù)據(jù)網(wǎng)絡(luò)流網(wǎng)絡(luò)流讀取數(shù)據(jù)量大小小讀取數(shù)據(jù)量大小小解密解密內(nèi)存流內(nèi)存流字節(jié)序列字節(jié)序列發(fā)送方發(fā)送方 接收方接收方數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)加密與解密的網(wǎng)絡(luò)傳輸過程數(shù)據(jù)加密與解密的網(wǎng)絡(luò)傳輸過程296.4 Hash算法與數(shù)字簽名

30、算法與數(shù)字簽名u 通過通過Internet下載文件后,怎樣知道下載的下載文件后,怎樣知道下載的文件是否和原始文件完全相同呢?或者說,發(fā)送文件是否和原始文件完全相同呢?或者說,發(fā)送方通過方通過Internet發(fā)送數(shù)據(jù)后,接收方如何驗(yàn)證接發(fā)送數(shù)據(jù)后,接收方如何驗(yàn)證接收的數(shù)據(jù)是否和原始數(shù)據(jù)完全相同呢?這就是數(shù)收的數(shù)據(jù)是否和原始數(shù)據(jù)完全相同呢?這就是數(shù)字簽名的用途。字簽名的用途。u 數(shù)字簽名是利用不對(duì)稱加密和數(shù)字簽名是利用不對(duì)稱加密和Hash算法共算法共同實(shí)現(xiàn)的。同實(shí)現(xiàn)的。 30u Hash算法也叫散列算法,其功能是把任意長度算法也叫散列算法,其功能是把任意長度的二進(jìn)制值映射為較小的固定長度的二進(jìn)制值,實(shí)的二進(jìn)制值映射為較小的固定長度的二進(jìn)制值,實(shí)現(xiàn)原理就是提供一種數(shù)據(jù)內(nèi)容和數(shù)據(jù)存放地址之間現(xiàn)原理就是提供一種數(shù)據(jù)內(nèi)容和數(shù)據(jù)存放地址之間的映射關(guān)系。利用的映射關(guān)系。利用Hash算法得到的這個(gè)固定長度的算法得到的這個(gè)固定長度的較小的二進(jìn)制值叫較小的二進(jìn)制值叫Hash值。值。6.4 Hash算法與數(shù)字簽名(續(xù))算法與數(shù)字簽名(續(xù))31uHash算法具有如下特點(diǎn):算法具有如下特點(diǎn): 1) 散列效果好。即使原始數(shù)據(jù)只發(fā)生一個(gè)小小散列效果好。即使原始數(shù)據(jù)只發(fā)生一個(gè)小小的改動(dòng),數(shù)據(jù)的散列

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論