999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于.NET Framework的增強(qiáng)型加密服務(wù)架構(gòu)

2015-12-25 11:56:39羅偉雄時(shí)東曉曾紀(jì)霞劉嵐
軟件 2015年8期

羅偉雄++時(shí)東曉++曾紀(jì)霞++劉嵐++郭柏喬

摘要:隨著數(shù)據(jù)加密技術(shù)的不斷發(fā)展,計(jì)算機(jī)處理能力的不斷增強(qiáng),以往許多被認(rèn)為比較安全的數(shù)據(jù)加密算法,都相繼被破解。針對(duì)這些情況,此文首先詳細(xì)分析了私鑰加密算法、公鑰加密算法、數(shù)字簽名技術(shù)和哈希函數(shù)的特點(diǎn)以及在使用過(guò)程中需要注意的問(wèn)題,然后提出了一種綜合使用私鑰、公鑰、數(shù)字簽名等技術(shù)的增強(qiáng)型加密服務(wù)架構(gòu)。此架構(gòu)利用公鑰算法的特點(diǎn)為私鑰算法生成密鑰,有效降低了因私鑰泄露而導(dǎo)致的威脅,利用數(shù)字簽名技術(shù)可有效降低數(shù)據(jù)被非法篡改的可能性。

關(guān)鍵詞:數(shù)據(jù)加密;私鑰加密;公鑰加密;數(shù)字簽名;哈希算法

中圖分類號(hào):TP309

文獻(xiàn)標(biāo)識(shí)碼:A

DOI: 10.3969/j.issn.1003-6970.2015.08.012

0 引言

當(dāng)在軟件開(kāi)發(fā)過(guò)程中往往會(huì)用到許多數(shù)據(jù)加密技術(shù),例如使用哈希函數(shù)加密密碼,使用數(shù)字簽名技術(shù)驗(yàn)證文本是否被篡改等等。在.NET Framework下,系統(tǒng)提供了一套相對(duì)完整可靠的加密服務(wù)。但是隨著數(shù)據(jù)加密技術(shù)的不斷發(fā)展,計(jì)算機(jī)處理能力的不斷增強(qiáng),以往被認(rèn)為比較安全的數(shù)據(jù)加密算法,都紛紛暴露其缺陷,有些甚至已經(jīng)宣布被破解。例如2004年我國(guó)密碼學(xué)家王小云教授利用碰撞方法實(shí)現(xiàn)了對(duì)MD5、SHA-1和RIPEMD的破解。那么在.NET Framework下,該如何更為安全地使用這些加密服務(wù),如何構(gòu)建相對(duì)安全的加密服務(wù)架構(gòu),是軟件開(kāi)發(fā)過(guò)程中必須考慮和深究的問(wèn)題。

1 加密服務(wù)類型

在使用.NET Framework平臺(tái)的開(kāi)發(fā)過(guò)程中最常用到的是以下四種加密服務(wù):

(1)私鑰加密。又稱為對(duì)稱加密,它使用單個(gè)共享的密鑰來(lái)加解密數(shù)據(jù)。

(2)公鑰加密。又稱為非對(duì)稱加密,它使用兩個(gè)密鑰來(lái)分別對(duì)數(shù)據(jù)進(jìn)行加解密。

(3)數(shù)字簽名。它的作用是驗(yàn)證收到的數(shù)據(jù)是否被非法篡改。

(4)哈希加密。其作用是生成數(shù)據(jù)的摘要信息。

2 私鑰加密算法

在.NET Framework 3.5及以上版本中支持DES,RC2,Rij ndael,TripleDES和AES等私鑰加密算法,這些都屬于分組加密算法。表1列出了這些算法的基本信息。

其中DES算法是使用較為廣泛的私鑰加密算法,但是由于DES算法的密鑰長(zhǎng)度只有64位,以現(xiàn)代計(jì)算機(jī)的計(jì)算能力來(lái)說(shuō),一天左右的時(shí)間就可以破解,因此在實(shí)際的應(yīng)用中應(yīng)該使用安全性相對(duì)較高的算法,如AES算法。由于AES算法支持128位以上長(zhǎng)度的密鑰,其安全性比DES要高,目前該算法已經(jīng)成為替代DES算法的新標(biāo)準(zhǔn)。

2.1 塊密碼模式

以上的私鑰加密算法在使用時(shí)可以選擇不同的塊密碼模式并設(shè)置初始向量IV,其目的是提高系統(tǒng)的安全性。塊密碼在一定程度上決定了加密的強(qiáng)度。當(dāng)前.NET Framework只支持CBC、CFB和ECB三種模式。

CBC模式:密碼塊鏈模式。該模式引入了反饋。每個(gè)純文本塊在加密前,通過(guò)按位“異或”操作與前一個(gè)塊的密碼文本結(jié)合。這樣確保了即使純文本包含許多相同的塊,這些塊中的每一個(gè)也會(huì)加密為不同的密碼文本塊。在加密塊之前,初始化向量通過(guò)按位“異或”操作與第一個(gè)純文本塊結(jié)合。

CFB模式:密碼反饋模式。該模式將少量遞增的純文本處理成密碼文本,而不是一次處理整個(gè)塊。

ECB模式:電子密碼本模式。該模式是分別加密每個(gè)塊。這意味著任何純文本塊只要相同,并且在同一消息中,或者在用相同的密鑰加密的不同消息中,都將被轉(zhuǎn)換成同樣的密碼文本塊。

通過(guò)上面的比較可以看到,ECB模式安全性相對(duì)較差,所以在實(shí)際應(yīng)用中盡量不要選擇該模式,另外在.NET Framework中AES算法不支持CFB模式。

2.2 填充模式

對(duì)于分組加密算法,由于是將明文分成固定長(zhǎng)度的多個(gè)塊再進(jìn)行處理,如果最后一個(gè)塊的字節(jié)數(shù)小于塊的長(zhǎng)度,則需要進(jìn)行填充。在.NET Framework中可選的填充模式有五種,而默認(rèn)使用的是PKCS7模式。這五種模式分別是:

ANSIX923:該模式下填充字符串由一個(gè)字節(jié)序列組成,此字節(jié)序列的最后一個(gè)字節(jié)填充字節(jié)序列的長(zhǎng)度,其余字節(jié)均填充數(shù)字零。

IS010126:該模式下填充字符串由一個(gè)字節(jié)序列組成,此字節(jié)序列的最后一個(gè)字節(jié)填充字節(jié)序列的長(zhǎng)度,其余字節(jié)填充隨機(jī)數(shù)據(jù)。

None:不填充。

PKCS7:該模式下填充字符串由一個(gè)字節(jié)序列組成,每個(gè)字節(jié)填充該字節(jié)序列的長(zhǎng)度。

Zeros:該模式下填充字符串由設(shè)置為零的字節(jié)組成。

2.3 加解密流程

在.NET Framework中使用私鑰加密算法就是把數(shù)據(jù)寫(xiě)入使用了某種私鑰算法的加密流中;而解密則是從加密流中讀出數(shù)據(jù),算法類型的選擇通過(guò)接口ICryptoTransform指定。私鑰加密算法的加密流程如圖1所示。

(1)定義密鑰Key和初始向量IV;

(2)構(gòu)建內(nèi)存流;

(3)創(chuàng)建加密接口;

(4)使用加密接口創(chuàng)建加密流并套接在內(nèi)存流上;

(5)創(chuàng)建流編寫(xiě)器并套接在加密流上;

(6)通過(guò)流編寫(xiě)器把明文寫(xiě)入加密流中;

(7)從內(nèi)存流中讀取密文;

(8)、清空敏感數(shù)據(jù)

以AES算法為例,其加密的核心代碼如下:

Aes aes= new AesManaged();//創(chuàng)建AES加密服務(wù)對(duì)象

aes.Mode=cipMode;//設(shè)置塊密碼模式

aes.Key= key;//設(shè)置密鑰

aes.IV= iv;//設(shè)置初始向量

aes.Padding= PaddingMode.PKCS7; //設(shè)置填充模式

MemoryStream ms= new MemoryStream();//創(chuàng)建:內(nèi)存流

ICryptoTransform tran= aes.CreateEncryptor();//創(chuàng)建加密接口

CryptoStream cs=new CryptoStream(ms, tran, CryptoStreamMode.Write);//創(chuàng)建加密轉(zhuǎn)換流

StreamWriter sw=new StreamWriter(cs);//創(chuàng)建編寫(xiě)器

sw.Write(m);//把明文寫(xiě)入流進(jìn)行加密

sw.Flush();

cs.FlushFinalBlock();

string enString=Convert.ToBase64String(ms.ToArray());//轉(zhuǎn)換為Base64字符串

aes.Clear();//清空敏感數(shù)據(jù)

解密操作與加密類似,也是先設(shè)置塊密碼模式、初始向量、填充模式、密鑰等基本信息,然后再進(jìn)行解密,其流程如圖2所示。

(1)定義密鑰Key和初始向量IV;

(2)構(gòu)建內(nèi)存流;

(3)把密文寫(xiě)入內(nèi)存流中;

(4)創(chuàng)建解密接口;

(5)使用解密接口創(chuàng)建解密流并套接在內(nèi)存流上;

(6)創(chuàng)建流讀取器并套接在解密流上;

(7)通過(guò)流讀取器從解密流中讀取明文;

(8)清空敏感數(shù)據(jù)。

以AES算法為例,其解密的核心代碼如下:

MemoryStream ms= new MemoryStream();//創(chuàng)建;內(nèi)存流

ms.Write(enByte,0,enByte.Length);//把密文寫(xiě)入內(nèi)存流中

ms.Position=0://重新定位內(nèi)存流

ICryptoTransform tran= aes.CreateDecryptor();//創(chuàng)建解密接口

CryptoStream cs=new CryptoStream(ms,tran,Crypto StreamMode.Read);//創(chuàng)建解密轉(zhuǎn)換流

StreamReader sr= new StreamReader(cs);//創(chuàng)建讀取器

string deString=sr.ReadToEnd();//從流中讀取明文

aes.Clear()//清空敏感數(shù)據(jù)

這里要注意的是,加解密完成后必須使用對(duì)應(yīng)的Clear方法清空內(nèi)存中的敏感信息,否則攻擊者有可能通過(guò)讀取內(nèi)存數(shù)據(jù)的方法實(shí)施破解。另外對(duì)象清零后,要調(diào)用Dispost方法以釋放與對(duì)象關(guān)聯(lián)的所有資源。

3 公鑰加密算法

在.NET Framework中有三種公鑰加密算法,但只有RSA算法能用于數(shù)據(jù)加密,而DSA算法只能用于數(shù)字簽名,DiffieHellman算法只能用于生成密鑰。

公鑰加密算法的使用最困難的是配置密鑰對(duì),而密鑰從一定層面上決定了算法的安全性。在.NETFramework下,公鑰加密算法的密鑰一般由系統(tǒng)生成,然后把密鑰保存到密鑰文件中,需要時(shí)再?gòu)拿荑€文件中導(dǎo)人。例如下面的代碼演示了生成RSA密鑰的過(guò)程。

RSACryptoServiceProvider rsa= new RSACryptoServiceProvider();//構(gòu)建RSA加密服務(wù)對(duì)象

Console.WriteLine(rsa.ToXmlString(true》;//輸出系統(tǒng)生成的公鑰和私鑰

在公鑰加密算法中,如果明文信息比較短則容易受到攻擊,為了增強(qiáng)其安全性,算法通過(guò)為短信息填充偽數(shù)據(jù)來(lái)加大破解的難度。在.NET Framework中RSA算法支持OAEP和直接加密兩種填充模式。

使用RSA算法進(jìn)行數(shù)據(jù)加密的流程一般是:

(1)創(chuàng)建公鑰加密算法服務(wù)對(duì)象;

(2)導(dǎo)人或生成公開(kāi)密鑰;

(3)把明文轉(zhuǎn)換為字節(jié)數(shù)組;

(4)調(diào)用加密函數(shù)加密數(shù)據(jù);

(5)清空敏感數(shù)據(jù)。

其核心代碼如下:

RSACryptoServiceProvider rsa= new RSACryptoServiceProvider();//構(gòu)建:RSA加密服務(wù)對(duì)象

rsa.FromXmlString(pubKey);//導(dǎo)人公開(kāi)密鑰

byte[] dataToEncrypt= Encoding.UTF8.GetBytes(m);//把明文轉(zhuǎn)換為字節(jié)數(shù)組

byte[] enByte=rsa.Encrypt(dataToEncrypt, DoOAEPPadding);//設(shè)置填充模式并加密

string enString=Convert.ToBase64String(enByte);//把字節(jié)數(shù)組轉(zhuǎn)換為Base64編碼的字符串

rsa.Clear()//清空敏感數(shù)據(jù)

其中加密函數(shù)Encrypt的第二個(gè)參數(shù)DoOAEPPadding,是用于設(shè)置填充模式的,此值為true,則表示使用OAEP填充,否則直接加密。

解密的流程與加密類似,只是調(diào)用的方法不同,一般為:

(1)創(chuàng)建公鑰加密算法服務(wù)對(duì)象;

(2)導(dǎo)人私密密鑰;

(3)把密文轉(zhuǎn)換為字節(jié)數(shù)組;

(4)調(diào)用解密函數(shù)解密數(shù)據(jù);

(5)清空敏感數(shù)據(jù)。

其核心代碼如下:

RSACryptoServiceProvider rsa= new RSACryptoServiceProvider();//構(gòu)建RSA加密服務(wù)對(duì)象

rsa.FromXmlString(priKey);//導(dǎo)人私密密鑰

byte[] dataToDecrypt= Convert.FromBase64String(enString);//把Base64編碼的密文字符串轉(zhuǎn)換為密文字節(jié)數(shù)組

byte[] deByte=rsa.Decrypt(dataToDecrypt, DoOAEPPadding);//設(shè)置填充模式并解密

string deString= Encoding.UTF8.GetString(deByte);//把明文字節(jié)數(shù)組轉(zhuǎn)換為明文字符串

rsa.Clear()//清空敏感數(shù)據(jù)

同樣Decrypt函數(shù)的第二個(gè)參數(shù)DoOAEPPadding也是用于設(shè)置填充模式的。

4 數(shù)字簽名算法

在.NET Framework中可以使用RSA、DSA和ECD算法進(jìn)行數(shù)字簽名,這三種算法的數(shù)字簽名函數(shù)均為SignData和SignHash。前者是計(jì)算指定數(shù)據(jù)的哈希值并對(duì)其簽名,而后者則是計(jì)算指定哈希值的簽名。兩者對(duì)應(yīng)的驗(yàn)證函數(shù)分別是VerifyData和VerifyHash。

其中ECD算法是橢圓曲線數(shù)字簽名算法,其安全性比其他兩種要高。另外在密鑰管理方面ECD算法與其他兩種算法有所不同。ECD算法的密鑰是由系統(tǒng)統(tǒng)一管理的,不需要用戶自行存儲(chǔ),這樣可以減少因私密密鑰泄露而導(dǎo)致的威脅。ECD算法的密鑰由類CngKey管理,該類也提供了對(duì)密鑰的導(dǎo)出,但是如果要導(dǎo)出私密密鑰,則要在創(chuàng)建CngKey對(duì)象實(shí)例時(shí)傳人CngKeyCreationParameters對(duì)象實(shí)例,并設(shè)置其ExportPolicy屬性為AllowPlaintextArchiving或AllowPlaintextExport。另外使用帶密鑰名稱的方式創(chuàng)建密鑰后,系統(tǒng)會(huì)將其自動(dòng)保存,待需要時(shí)可以使用CngKey.Open方法打開(kāi),如果要?jiǎng)h除,則可以使用Delete方法刪除。下面的代碼演示了密鑰的創(chuàng)建和導(dǎo)出。

CngKeyCreationParameters creationParameters= new CngKeyCreationParameters();//密鑰的高級(jí)屬性

creationParameters.KeyCreationOptions=CngKeyCreationOptions.OverwriteExistingKey;

creationParameters.ExportPolicy=CngExportPolicies.AllowPlaintextExport;,/設(shè)置策略允許私鑰以純文本形式導(dǎo)出多次

CngKey cngKey=CngKey.Create(CngAlgorithm.ECDsaP256,”ECDKey”,creationParameters);//創(chuàng)建密鑰

byte[] privateKey=cngKey.Export(CngKeyBlobFormat.EccPrivateBlob);//導(dǎo)出私密密鑰

byte[] publicKey=cngKey.Export( CngKeyBlobFormat.EccPublicBlob);//導(dǎo)出公開(kāi)密鑰

cngKey.Delete();//刪除系統(tǒng)存儲(chǔ)的密鑰

使用ECD算法進(jìn)行數(shù)字簽名的流程一般為:

(1)構(gòu)建ECD加密服務(wù)對(duì)象;

(2)導(dǎo)人或打開(kāi)私密密鑰;

(3)把文本轉(zhuǎn)換為字節(jié)數(shù)組;

(4)對(duì)文本進(jìn)行數(shù)字簽名;

(5)清空敏感數(shù)據(jù)。

其核心代碼如下所示:

CngKey cngkey=CngKey.Import(privateKey,CngKeyBlobFormat.EccPrivateBlob);//導(dǎo)人私有密鑰

ECDsaCng ecd= new ECDsaCng(cngkey);//構(gòu)建ECD加密服務(wù)對(duì)象

byte[] dataToSign= Encoding,UTF8.GetBytes(m);//把明文轉(zhuǎn)換為字節(jié)數(shù)組

byte[] enByte=ecd.SignData(dataToSign);//數(shù)字簽名

ecd.Clear()∥清空敏感數(shù)據(jù)

而驗(yàn)證簽名時(shí)對(duì)方需要先導(dǎo)人公開(kāi)密鑰,然后再進(jìn)行驗(yàn)證。其核心代碼如下。

CngKey cngkey=CngKey.Import(publicKey,CngKeyBlobFo rmat.EccPublicBlob);//導(dǎo)人公開(kāi)密鑰

ECDsaCng ecd= new ECDsaCng(cngkey);//構(gòu)建ECD加密服務(wù)對(duì)象

byte[] dataToSign= Encoding.UTF8.GetBytes(m);//把明文轉(zhuǎn)換為字節(jié)數(shù)組

bool verify=ecd.VerifyData(dataTo Sign,dataToVerify);//驗(yàn)證數(shù)字簽名

ecd.Clear()//清空敏感數(shù)據(jù)

另外ECD算法還提供了SignHash和VerifyHash方法對(duì)明文的摘要進(jìn)行簽名和驗(yàn)證,其使用方式與SignData和VerifyData類似,只是傳人的是明文的摘要而不是明文,這里就不再贅述。

5 哈希算法

在.NET Framework中提供了MD5、SHA-1、SHA-2和RIPEMD等多種哈希算法,其計(jì)算哈希值的函數(shù)名稱均為ComputeHash。2004年我國(guó)密碼學(xué)家王小云教授已經(jīng)宣布MD5、SHA-1和RIPEMD被破解,因此這些哈希算法已經(jīng)是不安全的,所以在實(shí)際開(kāi)發(fā)中建議使用SHA-2等算法。

生成哈希值的流程是:首先創(chuàng)建Hash轉(zhuǎn)換器,然后調(diào)用ComputeHash方法。下面是使用SHA-2生成哈希值的核心代碼。

byte[] dataToHash= Encoding.UTF8.GetBytes(m);//轉(zhuǎn)換明文為字節(jié)數(shù)組

SHA256 sha=SHA256.Create()∥構(gòu)建Hash轉(zhuǎn)換器

byte[] hash= sha.ComputeHash(dataToHash);//計(jì)算哈希值

由于相同的明文使用相同的哈希算法產(chǎn)生的哈希值都是相同的,因此極容易遭受已知密文的攻擊。例如,在許多系統(tǒng)中,用戶的密碼大部分都是用其哈希值存儲(chǔ),如果不做特殊處理,兩個(gè)相同密碼存儲(chǔ)的哈希值也必定相同。基于安全考慮,用戶更希望即使密碼相同,但存儲(chǔ)的哈希值卻不同。要實(shí)現(xiàn)這種效果,可以在計(jì)算過(guò)程中做一些特殊處理。例如在明文中添加一些附加信息,然后把明文和附加信息作為整體,一起計(jì)算其哈希值。而這些附加信息可以使用與用戶相關(guān)的數(shù)據(jù),如用戶名、身份證號(hào)等。當(dāng)然為了提高系統(tǒng)的安全性,可以使用由系統(tǒng)隨機(jī)產(chǎn)生的數(shù)據(jù)作為附加信息。在.NET Framework下可以使用RNGCryptoServiceProvider類來(lái)產(chǎn)生隨機(jī)數(shù)。該類所生成的隨機(jī)數(shù)安全性較高,其輸出的可推算概率不高于50%;即任何推算下一個(gè)輸出位的方法的成功概率低于隨機(jī)猜測(cè)。下面是使用RNGCryptoServiceProvider生成隨機(jī)數(shù)的代碼。

byte[] randomBytes=new byte[size];//創(chuàng)建字節(jié)數(shù)組

RNGCryptoServiceProvider.Create().GetBytes(randomBytes);//生成隨機(jī)數(shù)6增強(qiáng)型加密服務(wù)架構(gòu)

由于私鑰算法的加密速度要比公鑰加密算法快,特別是對(duì)大數(shù)據(jù)量來(lái)說(shuō)更是如此,所以在實(shí)際數(shù)據(jù)傳輸過(guò)程中以私鑰加密算法使用居多。下面筆者以私鑰加密算法為基礎(chǔ),提出如何結(jié)合公鑰加密算法和數(shù)字簽名算法構(gòu)建安全的加密服務(wù)架構(gòu)。

通過(guò)前面的分析可以看到,私鑰加密算法的安全性很大程度上取決于對(duì)密鑰和初始向量的保護(hù)。所以在.NET Framework中如何更加安全地使用私鑰加密算法就轉(zhuǎn)換為如何保護(hù)好私密密鑰和初始向量。為此增強(qiáng)型的加密服務(wù)架構(gòu)如下。

首先通訊雙方都已經(jīng)知道對(duì)方的RSA公鑰和ECD公鑰,這里分別記為RA、RB、EA和EB。通訊前,用戶A會(huì)使用DiffieHellman算法生成公鑰Al和A2,然后使用用戶B的RSA公鑰RB以及RSA算法對(duì)Al和A2進(jìn)行加密,然后使用ECD算法對(duì)加密結(jié)果進(jìn)行數(shù)字簽名,接著把加密的結(jié)果和簽名發(fā)給用戶B。用戶B收到后,首先使用用戶A的ECD公鑰EA以及ECD算法驗(yàn)證簽名是否正常,正常后再使用RSA算法解密出公鑰Al和A2,然后使用DiffieHellman算法生成自己的公開(kāi)密鑰Bl和B2,并結(jié)合密鑰Al和A2生成相應(yīng)的兩個(gè)私密密鑰,分別作為私鑰算法的Key和初始向量IV,接著把Bl和B2使用用戶A的RSA公鑰RA以及RSA算法加密并使用ECD算法對(duì)加密結(jié)果進(jìn)行數(shù)字簽名,然后把加密結(jié)果和簽名發(fā)給用戶A。用戶A收到后以同樣的方法進(jìn)行數(shù)字簽名的驗(yàn)證并解密出密鑰Bl和B2,然后使用DiffieHellman算法并結(jié)合Bl和B2生成兩個(gè)私密密鑰,這兩個(gè)密鑰和用戶B所生成的兩個(gè)私密密鑰是相同的。同樣這兩個(gè)密鑰分別作為私鑰算法的Key和初始向量IV。然后用戶A和用戶B使用該Key和IV以及AES算法對(duì)數(shù)據(jù)進(jìn)行加密,然后使用ECD算法進(jìn)行簽名,接著發(fā)送給對(duì)方。對(duì)方收到后首先使用ECD算法進(jìn)行簽名驗(yàn)證,然后使用AES算法進(jìn)行解密得到明文數(shù)據(jù)。整個(gè)流程如圖3所示。

其中使用DiffieHellman算法生成密鑰的流程一般是:

(1)構(gòu)建ECDiffieHellman對(duì)象;

(2)設(shè)置生成密鑰的參數(shù);

(3)獲取自己的公開(kāi)密鑰;

(4)傳輸自己的公開(kāi)密鑰給對(duì)方;

(5)接收對(duì)方的公開(kāi)密鑰;

(6)根據(jù)對(duì)方的公開(kāi)密鑰生成私密密鑰;

(7)清空敏感數(shù)據(jù)。

其核心代碼如下:

ECDiffieHellmanCng ecd= new ECDiffieHellmanCng();//構(gòu)建ECDiffieHellman對(duì)象

ecd.KeyDerivationFunction= ECDiffieHellmanKeyDerivationFunction.Hash;//設(shè)置密鑰派生函數(shù)

ecd.HashAlgorithm= CngAlgorithm.Sha256;,/設(shè)置生成密鑰所使用的哈希算法

byte[] senderPublicKey=ecd.PublicKey.ToByteArray();//獲取自己的公開(kāi)密鑰

byte[] receiverPublicKey=SendKey(senderPublicKey);//傳輸自己的公開(kāi)密鑰給對(duì)方并獲取對(duì)方的公開(kāi)密鑰

byte[] senderPrivateKey=ecd. DeriveKeyMaterial (CngKey. Import receiverPublicKey, CngKeyBlobFormat.EccPublicBlob));//根據(jù)對(duì)方的公開(kāi)密碼生成私密密鑰

代碼中要設(shè)置生成密鑰所使用的哈希算法,這里建議使用SHA-2算法較為安全。另外要注意DiffieHellman算法生成的密鑰長(zhǎng)度與AES算法的密鑰和初始向量的長(zhǎng)度匹配問(wèn)題,一般可通過(guò)截取或重復(fù)疊加的方式處理。

此架構(gòu)中,私密密鑰和初始向量都是由DiffieHellman算法生成的,并沒(méi)有在信道上傳輸,這樣可有效降低因私密密鑰泄露而導(dǎo)致的威脅。另外,由于對(duì)應(yīng)的私密密鑰要結(jié)合雙方的密鑰信息方可生成,因此安全性較高。而且在傳輸公鑰過(guò)程中,系統(tǒng)還對(duì)密鑰進(jìn)行了加密和數(shù)字簽名,這樣有效降低了密鑰被非法竊取和篡改的可能。同樣在數(shù)據(jù)傳輸過(guò)程中,系統(tǒng)對(duì)信息進(jìn)行了加密和數(shù)字簽名,這樣有效提高了數(shù)據(jù)的安全性和可靠性。整個(gè)架構(gòu)綜合運(yùn)用了私鑰加密算法、公鑰加密算法和數(shù)字簽名技術(shù)各自的優(yōu)點(diǎn),取長(zhǎng)補(bǔ)短,有效提高了系統(tǒng)的安全性和可靠性。

7 結(jié)論

本文對(duì)在NET Framework中如何更加安全可靠地使用私鑰加密算法、公鑰加密算法、數(shù)字簽名算法和哈希算法做了詳細(xì)的分析和介紹,并且提出了一種綜合運(yùn)用私鑰加密算法、公鑰加密算法和數(shù)字簽名算法的增強(qiáng)型加密服務(wù)架構(gòu)。該架構(gòu)充分利用這些算法的優(yōu)點(diǎn),有效降低了因私密密鑰泄露而導(dǎo)致的威脅,降低了信息被非法竊取和篡改地可能,有效提高了系統(tǒng)的安全性和可靠性。

主站蜘蛛池模板: 丝袜美女被出水视频一区| 成年人国产网站| 亚洲成人精品| 任我操在线视频| 久久夜色撩人精品国产| 中文字幕有乳无码| 国产精品丝袜视频| 大香网伊人久久综合网2020| 久久黄色影院| 热伊人99re久久精品最新地| 麻豆国产在线不卡一区二区| 99久久免费精品特色大片| 成人精品在线观看| 日本www色视频| 国产一级一级毛片永久| 欧美综合区自拍亚洲综合天堂| 青草娱乐极品免费视频| 亚洲综合网在线观看| 无码一区中文字幕| 久久永久精品免费视频| 国产亚洲欧美在线人成aaaa| 日韩第一页在线| 国产精品精品视频| 国产精品成人不卡在线观看| 国产真实乱子伦视频播放| 欧美色99| 久久综合九九亚洲一区| 欧美日韩久久综合| 久久久久免费精品国产| 国产美女免费网站| 日本91在线| 免费人成黄页在线观看国产| 国产成人福利在线| 欧美国产在线看| 欧美亚洲激情| 日本三级欧美三级| 国产精品毛片一区| 四虎影视8848永久精品| 91成人免费观看在线观看| 久久久噜噜噜| 国产无码网站在线观看| 午夜福利在线观看入口| 无码一区二区波多野结衣播放搜索| 国产成a人片在线播放| 亚洲九九视频| 激情国产精品一区| 亚洲成人77777| 亚洲综合婷婷激情| 国产精品开放后亚洲| 久久久波多野结衣av一区二区| 亚洲国产精品人久久电影| 国产1区2区在线观看| 久久青草免费91线频观看不卡| 欧美人与动牲交a欧美精品| 亚洲综合狠狠| 深夜福利视频一区二区| 色视频久久| 亚洲免费三区| 免费一级毛片在线播放傲雪网| jizz在线免费播放| 成色7777精品在线| 香蕉久久国产超碰青草| 欧美成人综合视频| 狼友av永久网站免费观看| a级毛片在线免费| 日本a∨在线观看| 亚洲精品777| 亚洲成a人片在线观看88| 色悠久久综合| 国产综合欧美| 伊人久久福利中文字幕| 國產尤物AV尤物在線觀看| 日韩一区二区三免费高清| 亚洲第一区在线| 香蕉eeww99国产精选播放| 色天天综合| 亚洲精品国产综合99久久夜夜嗨| 2020最新国产精品视频| 国产欧美日韩在线在线不卡视频| 国产欧美专区在线观看| AV在线麻免费观看网站| 日本手机在线视频|