加密解密設(shè)計(jì)試驗(yàn)_第1頁(yè)
加密解密設(shè)計(jì)試驗(yàn)_第2頁(yè)
加密解密設(shè)計(jì)試驗(yàn)_第3頁(yè)
加密解密設(shè)計(jì)試驗(yàn)_第4頁(yè)
加密解密設(shè)計(jì)試驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、鄭州輕工業(yè)學(xué)院本科實(shí)驗(yàn)報(bào)告設(shè)計(jì)題目: 加密解密設(shè)計(jì) 學(xué)生姓名: 王相逢 系 別: 計(jì)算機(jī)與通信工程學(xué)院 專 業(yè): 網(wǎng)絡(luò)運(yùn)維 班 級(jí): 13-02 學(xué) 號(hào): 541307110240 指導(dǎo)教師: 吉星、程立輝 2016 年 04月 18日目錄1目的32題目33加密知識(shí)44步驟74.1主框架74.2設(shè)計(jì)類74.3各種具體加密算法84.4測(cè)試265報(bào)告276驗(yàn)收287成績(jī)28附錄1報(bào)告格式29附錄2 Security類311 目的數(shù)據(jù)加密技術(shù)是網(wǎng)絡(luò)中最基本的安全技術(shù),主要是通過(guò)對(duì)網(wǎng)絡(luò)中傳輸?shù)男畔⑦M(jìn)行數(shù)據(jù)加密來(lái)保障其安全性,這是一種主動(dòng)安全防御策略,用很小的代價(jià)即可為信息提供相當(dāng)大的安全保護(hù)。2 題目

2、使用C#編程語(yǔ)言,進(jìn)行數(shù)據(jù)的加密與解密。系統(tǒng)基本功能描述如下:1、 實(shí)現(xiàn)DES算法加密與解密功能。2、 實(shí)現(xiàn)TripleDES算法加密與解密功能。3、 實(shí)現(xiàn)MD5算法加密功能。4、 實(shí)現(xiàn)RC2算法加密與解密功能。5、 實(shí)現(xiàn)TripleDES算法加密與解密功能。6、 實(shí)現(xiàn)RSA算法加密與解密功能。3 加密知識(shí)l 加密的基本概念加密,是一種限制對(duì)網(wǎng)絡(luò)上傳輸數(shù)據(jù)的訪問(wèn)權(quán)的技術(shù)。原始數(shù)據(jù)(也稱為明文,plaintext)被加密設(shè)備(硬件或軟件)和密鑰加密而產(chǎn)生的經(jīng)過(guò)編碼的數(shù)據(jù)稱為密文(ciphertext)。將密文還原為原始明文的過(guò)程稱為解密,它是加密的反向處理,但解密者必須利用相同類型的加密設(shè)備和密

3、鑰對(duì)密文進(jìn)行解密。加密的基本功能包括:1. 防止不速之客查看機(jī)密的數(shù)據(jù)文件;2. 防止機(jī)密數(shù)據(jù)被泄露或篡改;3. 防止特權(quán)用戶(如系統(tǒng)管理員)查看私人數(shù)據(jù)文件;4. 使入侵者不能輕易地查找一個(gè)系統(tǒng)的文件。數(shù)據(jù)加密是確保計(jì)算機(jī)網(wǎng)絡(luò)安全的一種重要機(jī)制,雖然由于成本、技術(shù)和管理上的復(fù)雜性等原因,目前尚未在網(wǎng)絡(luò)中普及,但數(shù)據(jù)加密的確是實(shí)現(xiàn)分布式系統(tǒng)和網(wǎng)絡(luò)環(huán)境下數(shù)據(jù)安全的重要手段之一。數(shù)據(jù)加密可在網(wǎng)絡(luò)OSI七層協(xié)議(OSI是Open System Interconnect的縮寫(xiě),意為開(kāi)放式系統(tǒng)互聯(lián)。國(guó)際標(biāo)準(zhǔn)組織(國(guó)際標(biāo)準(zhǔn)化組織)制定了OSI模型。這個(gè)模型把網(wǎng)絡(luò)通信的工作分為7層,分別是物理層、數(shù)據(jù)鏈路層

4、、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層和應(yīng)用層。)的多層上實(shí)現(xiàn)、所以從加密技術(shù)應(yīng)用的邏輯位置看,有三種方式:鏈路加密:通常把網(wǎng)絡(luò)層以下的加密叫鏈路加密,主要用于保護(hù)通信節(jié)點(diǎn)間傳輸?shù)臄?shù)據(jù),加解密由置于線路上的密碼設(shè)備實(shí)現(xiàn)。根據(jù)傳遞的數(shù)據(jù)的同步方式又可分為同步通信加密和異步通信加密兩種,同步通信加密又包含字節(jié)同步通信加密和位同步通信加密。節(jié)點(diǎn)加密:是對(duì)鏈路加密的改進(jìn)。在協(xié)議傳輸層上進(jìn)行加密,主要是對(duì)源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)之間傳輸數(shù)據(jù)進(jìn)行加密保護(hù),與鏈路加密類似.只是加密算法要結(jié)合在依附于節(jié)點(diǎn)的加密模件中,克服了鏈路加密在節(jié)點(diǎn)處易遭非法存取的缺點(diǎn)。端對(duì)端加密:網(wǎng)絡(luò)層以上的加密稱為端對(duì)端加密。是面向網(wǎng)絡(luò)層主體。對(duì)

5、應(yīng)用層的數(shù)據(jù)信息進(jìn)行加密,易于用軟件實(shí)現(xiàn),且成本低,但密鑰管理問(wèn)題困難,主要適合大型網(wǎng)絡(luò)系統(tǒng)中信息在多個(gè)發(fā)方和收方之間傳輸?shù)那闆r。l 數(shù)據(jù)加密的應(yīng)用1、 媒體加密:DRM2、 文件加密:文本加密、pdf、word3、 數(shù)據(jù)加密:ASP.NET(C#)中的數(shù)據(jù)加密4、 硬件加密:加密狗l 加密技術(shù)發(fā)展趨勢(shì)私用密鑰加密技術(shù)與公開(kāi)密鑰加密技術(shù)相結(jié)合:鑒于兩種密碼體制加密的特點(diǎn),在實(shí)際應(yīng)用中可以采用折衷方案,即結(jié)合使用DES/IDEA和RSA,以DES為內(nèi)核,RSA為外殼,對(duì)于網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)可用DES或IDEA加密,而加密用的密鑰則用RSA加密傳送,此種方法既保證了數(shù)據(jù)安全又提高了加密和解密的速度,

6、這也是目前加密技術(shù)發(fā)展的新方向之一。尋求新算法:跳出以常見(jiàn)的迭代為基礎(chǔ)的構(gòu)造思路,脫離基于某些數(shù)學(xué)問(wèn)題復(fù)雜性的構(gòu)造方法。如劉尊全先生提出的劉氏算法,是一種基于密鑰的公開(kāi)密鑰體制,它采用了隨機(jī)性原理構(gòu)造加解密變換,并將其全部運(yùn)算控制隱匿于密鑰中,密鑰長(zhǎng)度可變。它是采用選取一定長(zhǎng)度的分割來(lái)構(gòu)造大的搜索空間,從而實(shí)現(xiàn)一次非線性變換。此種加密算法加密強(qiáng)度高、速度快、計(jì)算開(kāi)銷低。加密最終將被集成到系統(tǒng)和網(wǎng)絡(luò)中,例如IPV6協(xié)議就已有了內(nèi)置加密的支持,在硬件方面,Intel公司正研制一種加密協(xié)處理器。它可以集成到微機(jī)的主極上。l 加密技術(shù)的分類加密類型可以簡(jiǎn)單地分為四種:1. 根本不考慮解密問(wèn)題,如:MD

7、5;2. 私用密鑰加密技術(shù):對(duì)稱式加密(Symmetric Key Encryption):對(duì)稱式加密方式對(duì)加密和解密使用相同的密鑰。通常,這種加密方式在應(yīng)用中難以實(shí)施,因?yàn)橛猛环N安全方式共享密鑰很難。如:RC4、RC2、DES 和 AES 系列加密算法。3. 公開(kāi)密鑰加密技術(shù):非對(duì)稱密鑰加密(Asymmetric Key Encryption):非對(duì)稱密鑰加密使用一組公共/私人密鑰系統(tǒng),加密時(shí)使用一種密鑰,解密時(shí)使用另一種密鑰。公共密鑰可以廣泛的共享和透露。當(dāng)需要用加密方式向服務(wù)器外部傳送數(shù)據(jù)時(shí),這種加密方式更方便。如: RSA4. 數(shù)字證書(shū)。(Certificate):數(shù)字證書(shū)是一種非對(duì)

8、稱密鑰加密,但是,一個(gè)組織可以使用證書(shū)并通過(guò)數(shù)字簽名將一組公鑰和私鑰與其擁有者相關(guān)聯(lián)。4 步驟4.1 主框架根據(jù)功能描述可知,建立主界面窗體如下所示。設(shè)置主窗體的IsMdiContainer為T(mén)rue;添加menuStrip控件,并設(shè)置其相應(yīng)菜單屬性。4.2 設(shè)計(jì)類根據(jù)需求分析,定義Security類用于描述各種加密算法,具體方法是:1、右擊“解決方案資源管理器”的項(xiàng)目,新建文件夾“app_code”2、選擇“項(xiàng)目”“添加類”,輸入類的名稱:4.3 各種具體加密算法4.3.1 對(duì)稱加密之DES和TripleDES加密與解密對(duì)稱加密對(duì)稱加密,是一種比較傳統(tǒng)的加密方式,其加密運(yùn)算、解密運(yùn)算使用的是

9、同樣的密鑰,信息的發(fā)送者和信息的接收者在進(jìn)行信息的傳輸與處理時(shí),必須共同持有該密碼(稱為對(duì)稱密碼)。因此,通信雙方都必須獲得這把鑰匙,并保持鑰匙的秘密。單鑰密碼系統(tǒng)的安全性依賴于以下兩個(gè)因素:第一、加密算法必須是足夠強(qiáng)的,僅僅基于密文本身去解密信息在實(shí)踐上是不可能的。第二、加密方法的安全性依賴于密鑰的秘密性,而不是算法的秘密性,因此,我們沒(méi)有必要確保算法的秘密性(事實(shí)上,現(xiàn)實(shí)中使用的很多單鑰密碼系統(tǒng)的算法都是公開(kāi)的),但是我們一定要保證密鑰的秘密性。DES(Data Encryption Standard)和TripleDES是對(duì)稱加密的兩種實(shí)現(xiàn)。DES和TripleDES基本算法一致,只是T

10、ripleDES算法提供的key位數(shù)更多,加密可靠性更高。DES使用的密鑰key為8字節(jié),初始向量IV也是8字節(jié)。TripleDES使用24字節(jié)的key,初始向量IV也是8字節(jié)。兩種算法都是以8字節(jié)為一個(gè)塊進(jìn)行加密,一個(gè)數(shù)據(jù)塊一個(gè)數(shù)據(jù)塊的加密,一個(gè)8字節(jié)的明文加密后的密文也是8字節(jié)。如果明文長(zhǎng)度不為8字節(jié)的整數(shù)倍,添加值為0的字節(jié)湊滿8字節(jié)整數(shù)倍。所以加密后的密文長(zhǎng)度一定為8字節(jié)的整數(shù)倍。加密解密過(guò)程上圖是整個(gè)DES和TripleDES算法的加密解密過(guò)程,下面以TripleDES為例,結(jié)合dotnet分析加密解密的各個(gè)步驟,并給出相關(guān)實(shí)現(xiàn)代碼。1、 生成key和IVSystem.Securit

11、y.Cryptography. TripleDESCryptoServiceProvider類是dotnet中實(shí)現(xiàn)TripleDES算法的主要的類。TripleDESCryptoServiceProvider類只有一個(gè)構(gòu)造方法TripleDESCryptoServiceProvider(),這個(gè)方法把一些屬性初始化:KeySize(加密密鑰長(zhǎng)度,以位為單位)= 192(24字節(jié))BlockSize(加密處理的數(shù)據(jù)塊大小,以位為單位)= 64(8字節(jié))FeedbackSize(加密數(shù)據(jù)塊后返回的數(shù)據(jù)大小,以位為單位)= 64(8字節(jié))TripleDESCryptoServiceProvider構(gòu)

12、造方法同時(shí)會(huì)初始化一組隨機(jī)的key和IV。默認(rèn)的TripleDESCryptoServiceProvider的key為24字節(jié),IV為8字節(jié),加密數(shù)據(jù)塊為8字節(jié)。生成key和IV的代碼很簡(jiǎn)單:TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();byte keyArray = tDESalg.Key;byte IVArray = tDESalg.IV;生成的key和IV在加密過(guò)程和解密過(guò)程都要使用。2、 字符串明文轉(zhuǎn)成某一代碼頁(yè)對(duì)應(yīng)的編碼字節(jié)流待加密的數(shù)據(jù)可能有兩種形式,一種是二進(jìn)制的數(shù)據(jù),本

13、身就是一組字節(jié)流,這樣的數(shù)據(jù)可以跳過(guò)這一步,直接進(jìn)入加密步驟。還有一種情況是字符串?dāng)?shù)據(jù),字符串中同樣的字符使用不同的代碼頁(yè)會(huì)生成不同的字節(jié)碼,所以從字符串到字節(jié)流的轉(zhuǎn)換是需要指定使用何種編碼的。在解密之后,要從字節(jié)流轉(zhuǎn)換到字符串就要使用相同的代碼頁(yè)解碼,否則就會(huì)出現(xiàn)亂碼。/ 待加密的字符串string plainTextString = Here is some data to encrypt. 這里是一些要加密的數(shù)據(jù)。;/ 使用utf-8編碼(也可以使用其它的編碼)Encoding sEncoding = Encoding.GetEncoding(utf-8);/ 把字符串明文轉(zhuǎn)換成utf-

14、8編碼的字節(jié)流byte plainTextArray = sEncoding.GetBytes(plainTextString);3、 加密操作加密的原料是明文字節(jié)流,TripleDES算法對(duì)字節(jié)流進(jìn)行加密,返回的是加密后的字節(jié)流。同時(shí)要給定加密使用的key和IV。/ 把字符串明文轉(zhuǎn)換成utf-8編碼的字節(jié)流byte plainTextArray = sEncoding.GetBytes(plainTextString);public static byte EncryptString(byte plainTextArray, byte Key, byte IV)/ 建立一個(gè)MemoryStr

15、eam,這里面存放加密后的數(shù)據(jù)流MemoryStream mStream = new MemoryStream();/ 使用MemoryStream 和key、IV新建一個(gè)CryptoStream 對(duì)象CryptoStream cStream = new CryptoStream(mStream,new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV),CryptoStreamMode.Write);/ 將加密后的字節(jié)流寫(xiě)入到MemoryStreamcStream.Write(plainTextArray, 0, plainTe

16、xtArray.Length);/把緩沖區(qū)中的最后狀態(tài)更新到MemoryStream,并清除cStream的緩存區(qū)cStream.FlushFinalBlock();/ 把解密后的數(shù)據(jù)流轉(zhuǎn)成字節(jié)流byte ret = mStream.ToArray();/ 關(guān)閉兩個(gè)streams.cStream.Close();mStream.Close();return ret;4、 解密操作解密操作解密上面步驟生成的密文byte,需要使用到加密步驟使用的同一組Key和IV。/ 調(diào)用解密方法,返回已解密數(shù)據(jù)的bytebyte finalPlainTextArray = DecryptTextFromMemo

17、ry(Data, keyArray, IVArray);public static byte DecryptTextFromMemory(byte EncryptedDataArray, byte Key, byte IV)/ 建立一個(gè)MemoryStream,這里面存放加密后的數(shù)據(jù)流MemoryStream msDecrypt = new MemoryStream(EncryptedDataArray);/ 使用MemoryStream 和key、IV新建一個(gè)CryptoStream 對(duì)象CryptoStream csDecrypt = new CryptoStream(msDecrypt,

18、new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV),CryptoStreamMode.Read);/ 根據(jù)密文byte的長(zhǎng)度(可能比加密前的明文長(zhǎng)),新建一個(gè)存放解密后明文的bytebyte DecryptDataArray = new byteEncryptedDataArray.Length;/ 把解密后的數(shù)據(jù)讀入到DecryptDataArraycsDecrypt.Read(DecryptDataArray, 0, DecryptDataArray.Length);msDecrypt.Close();csDecryp

19、t.Close();return DecryptDataArray;有一點(diǎn)需要注意,DES加密是以數(shù)據(jù)塊為單位加密的,8個(gè)字節(jié)一個(gè)數(shù)據(jù)塊,如果待加密明byte的長(zhǎng)度不是8字節(jié)的整數(shù)倍,算法先用值為“0”的byte補(bǔ)足8個(gè)字節(jié),然后進(jìn)行加密。所以加密后的密文長(zhǎng)度一定是8的整數(shù)倍。這樣的密文解密后如果補(bǔ)了0值的byte,則解密后這些0值的byte依然存在。比如上例中要加密的明文是:“Here is some data to encrypt. 這里是一些要加密的數(shù)據(jù)?!鞭D(zhuǎn)成明文byte后是66個(gè)字節(jié),DES算法就會(huì)補(bǔ)上6個(gè)0值的byte,補(bǔ)到72個(gè)字節(jié)。這樣加密后再解密回來(lái)的密文byte解碼后的字符

20、串就是這樣的:Here is some data to encrypt. 這里是一些要加密的數(shù)據(jù)。0000005、 從編碼字節(jié)流轉(zhuǎn)成字符串明文/ 使用前面定義的Encoding,utf-8的編碼把byte轉(zhuǎn)成字符串plainTextString = sEncoding.GetString(finalPlainTextArray);4.3.2 非對(duì)稱加密之RSA加密和解密的講解RSA公鑰加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美國(guó)麻省理工學(xué)院)開(kāi)發(fā)的。RSA取名來(lái)自開(kāi)發(fā)他們?nèi)叩拿?。RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已

21、知的所有密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。RSA算法基于一個(gè)十分簡(jiǎn)單的數(shù)論事實(shí):將兩個(gè)大素?cái)?shù)相乘十分容易,但那時(shí)想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開(kāi)作為加密密鑰。RSA算法是第一個(gè)能同時(shí)用于加密和數(shù)字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現(xiàn)在已近二十年,經(jīng)歷了各種攻擊的考驗(yàn),逐漸為人們接受,普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。RSA的安全性依賴于大數(shù)的因子分解,但并沒(méi)有從理論上證明破譯RSA的難度與大數(shù)分解難度等價(jià)。即RSA的重大缺陷是無(wú)法從理論上把握它的保密性能如何,而且密碼學(xué)界多數(shù)人士?jī)A向于因子分解不是NPC問(wèn)題。RSA的缺點(diǎn)主

22、要有:A)產(chǎn)生密鑰很麻煩,受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密。B)分組長(zhǎng)度太大,為保證安全性,n 至少也要 600bits以上,使運(yùn)算代價(jià)很高,尤其是速度較慢,較對(duì)稱密碼算法慢幾個(gè)數(shù)量級(jí);且隨著大數(shù)分解技術(shù)的發(fā)展,這個(gè)長(zhǎng)度還在增加,不利于數(shù)據(jù)格式的標(biāo)準(zhǔn)化。目前,SET(Secure Electronic Transaction)協(xié)議中要求CA采用2048bits長(zhǎng)的密鑰,其他實(shí)體使用1024比特的密鑰。C)RSA密鑰長(zhǎng)度隨著保密級(jí)別提高,增加很快。這種算法1978年就出現(xiàn)了,它是第一個(gè)既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法。它易于理解和操作,也很流行。算法的名字以發(fā)明者的名字命名:R

23、on Rivest, AdiShamir 和Leonard Adleman。早在1973年,英國(guó)國(guó)家通信總局的數(shù)學(xué)家Clifford Cocks就發(fā)現(xiàn)了類似的算法。但是他的發(fā)現(xiàn)被列為絕密,直到1998年才公諸于世。RSA算法是一種非對(duì)稱密碼算法,所謂非對(duì)稱,就是指該算法需要一對(duì)密鑰,使用其中一個(gè)加密,則需要用另一個(gè)才能解密。RSA的算法涉及三個(gè)參數(shù),n、e1、e2。其中,n是兩個(gè)大質(zhì)數(shù)p、q的積,n的二進(jìn)制表示時(shí)所占用的位數(shù),就是所謂的密鑰長(zhǎng)度。e1和e2是一對(duì)相關(guān)的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質(zhì);再選擇e2,要求(e2*e1)mod(p-1)*(q-1)=1。(n

24、及e1),(n及e2)就是密鑰對(duì)。RSA加解密的算法完全相同,設(shè)A為明文,B為密文,則:A=Be1 mod n;B=Ae2 mod n;e1和e2可以互換使用,即:A=Be2 mod n;B=Ae1 mod n;C#代碼實(shí)現(xiàn)需引用using System.Security.Cryptography;/ / RSA加密/ / / / public static string RSAEncrypt(string publickey, string content)publickey = 5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQx

25、a5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=AQAB;RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();byte cipherbytes;rsa.FromXmlString(publickey);cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);retur

26、n Convert.ToBase64String(cipherbytes);/ / RSA解密/ / / / public static string RSADecrypt(string privatekey, string content)privatekey = 5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g

27、9v4Hk=AQAB/hf2dnK7rNfl3lbqghWcpFdu778hUpIEBixCDL5WiBtpkZdpSw90aERmHJYaW2RGvGRi6zSftLh00KHsPcNUMw=6Cn/jOLrPapDTEp1Fkq+uz+1Do0eeX7HYqi9rY29CqShzCeI7LEYOoSwYuAJ3xA/DuCdQENPSoJ9KFbO4Wsow=ga1rHIJro8e/yhxjrKYo/nqc5ICQGhrpMNlPkD9n3CjZVPOISkWF7FzUHEzDANeJfkZhcZa21z24aG3rKo5Qnw=MNGsCB8rYlMsRZ2ek2pyQwO7h/sZT8

28、y5ilO9wu08Dwnot/7UMiOEQfDWstY3w5XQQHnvC9WFyCfP4h4QBissyw=EG02S7SADhH1EVT9DD0Z62Y0uY7gIYvxX/uq+IzKSCwB8M2G7Qv9xgZQaQlLpCaeKbux3Y59hHM+KpamGL19Kg=vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf+N

29、r0FeNW1RB1XG30=;RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();byte cipherbytes;rsa.FromXmlString(privatekey);cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);return Encoding.UTF8.GetString(cipherbytes);4.3.3 ASP.NET(C#)常用加密類調(diào)用的講解1、C#常用加密解密類庫(kù)代碼如下:/ / MD5 加密靜態(tài)方法/ / 待

30、加密的密文/ returnspublic static string MD5Encrypt(string EncryptString)if (string.IsNullOrEmpty(EncryptString) throw (new Exception(密文不得為空); MD5 m_ClassMD5 = new MD5CryptoServiceProvider();string m_strEncrypt = ;trym_strEncrypt = BitConverter.ToString(m_ClassMD5.ComputeHash(Encoding.Default.GetBytes(Enc

31、ryptString).Replace(-, );catch (ArgumentException ex) throw ex; catch (CryptographicException ex) throw ex; catch (Exception ex) throw ex; finally m_ClassMD5.Clear(); return m_strEncrypt;/ / DES 加密(數(shù)據(jù)加密標(biāo)準(zhǔn),速度較快,適用于加密大量數(shù)據(jù)的場(chǎng)合)/ / 待加密的密文/ 加密的密鑰/ returnspublic static string DESEncrypt(string EncryptStrin

32、g, string EncryptKey)if (string.IsNullOrEmpty(EncryptString) throw (new Exception(密文不得為空); if (string.IsNullOrEmpty(EncryptKey) throw (new Exception(密鑰不得為空); if (EncryptKey.Length != 8) throw (new Exception(密鑰必須為8位); byte m_btIV = 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF ;string m_strEncrypt =

33、 ;DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();trybyte m_btEncryptString = Encoding.Default.GetBytes(EncryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateEncryptor(Encoding.Default.GetBytes(Encryp

34、tKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(m_btEncryptString, 0, m_btEncryptString.Length);m_cstream.FlushFinalBlock();m_strEncrypt = Convert.ToBase64String(m_stream.ToArray();m_stream.Close(); m_stream.Dispose();m_cstream.Close(); m_cstream.Dispose();catch (IOException ex) throw ex; ca

35、tch (CryptographicException ex) throw ex; catch (ArgumentException ex) throw ex; catch (Exception ex) throw ex; finally m_DESProvider.Clear(); return m_strEncrypt;/ / DES 解密(數(shù)據(jù)加密標(biāo)準(zhǔn),速度較快,適用于加密大量數(shù)據(jù)的場(chǎng)合)/ / 待解密的密文/ 解密的密鑰/ returnspublic static string DESDecrypt(string DecryptString, string DecryptKey)if

36、(string.IsNullOrEmpty(DecryptString) throw (new Exception(密文不得為空); if (string.IsNullOrEmpty(DecryptKey) throw (new Exception(密鑰不得為空); if (DecryptKey.Length != 8) throw (new Exception(密鑰必須為8位); byte m_btIV = 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF ;string m_strDecrypt = ;DESCryptoServiceProvid

37、er m_DESProvider = new DESCryptoServiceProvider();trybyte m_btDecryptString = Convert.FromBase64String(DecryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStr

38、eamMode.Write);m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);m_cstream.FlushFinalBlock();m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray();m_stream.Close(); m_stream.Dispose();m_cstream.Close(); m_cstream.Dispose();catch (IOException ex) throw ex; catch (CryptographicExc

39、eption ex) throw ex; catch (ArgumentException ex) throw ex; catch (Exception ex) throw ex; finally m_DESProvider.Clear(); return m_strDecrypt;/ / RC2 加密(用變長(zhǎng)密鑰對(duì)大量數(shù)據(jù)進(jìn)行加密)/ / 待加密密文/ 加密密鑰/ returnspublic static string RC2Encrypt(string EncryptString, string EncryptKey)if (string.IsNullOrEmpty(EncryptStri

40、ng) throw (new Exception(密文不得為空); if (string.IsNullOrEmpty(EncryptKey) throw (new Exception(密鑰不得為空); if (EncryptKey.Length 16) throw (new Exception(密鑰必須為5-16位); string m_strEncrypt = ;byte m_btIV = 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF ;RC2CryptoServiceProvider m_RC2Provider = new RC2Crypto

41、ServiceProvider();trybyte m_btEncryptString = Encoding.Default.GetBytes(EncryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_RC2Provider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(

42、m_btEncryptString, 0, m_btEncryptString.Length);m_cstream.FlushFinalBlock();m_strEncrypt = Convert.ToBase64String(m_stream.ToArray();m_stream.Close(); m_stream.Dispose();m_cstream.Close(); m_cstream.Dispose();catch (IOException ex) throw ex; catch (CryptographicException ex) throw ex; catch (Argumen

43、tException ex) throw ex; catch (Exception ex) throw ex; finally m_RC2Provider.Clear(); return m_strEncrypt;/ / RC2 解密(用變長(zhǎng)密鑰對(duì)大量數(shù)據(jù)進(jìn)行加密)/ / 待解密密文/ 解密密鑰/ returnspublic static string RC2Decrypt(string DecryptString, string DecryptKey)if (string.IsNullOrEmpty(DecryptString) throw (new Exception(密文不得為空); i

44、f (string.IsNullOrEmpty(DecryptKey) throw (new Exception(密鑰不得為空); if (DecryptKey.Length 16) throw (new Exception(密鑰必須為5-16位); byte m_btIV = 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF ;string m_strDecrypt = ;RC2CryptoServiceProvider m_RC2Provider = new RC2CryptoServiceProvider();trybyte m_btDecry

45、ptString = Convert.FromBase64String(DecryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_RC2Provider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(m_btDecryptString, 0, m_btDecryptStr

46、ing.Length);m_cstream.FlushFinalBlock();m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray();m_stream.Close(); m_stream.Dispose();m_cstream.Close(); m_cstream.Dispose();catch (IOException ex) throw ex; catch (CryptographicException ex) throw ex; catch (ArgumentException ex) throw ex; catch (

47、Exception ex) throw ex; finally m_RC2Provider.Clear(); return m_strDecrypt;/ / 3DES 加密(基于DES,對(duì)一塊數(shù)據(jù)用三個(gè)不同的密鑰進(jìn)行三次加密,強(qiáng)度更高)/ / 待加密密文/ 密鑰一/ 密鑰二/ 密鑰三/ returnspublic static string DES3Encrypt(string EncryptString, string EncryptKey1, string EncryptKey2, string EncryptKey3)string m_strEncrypt = ;trym_strEncr

48、ypt = DESEncrypt(EncryptString, EncryptKey3);m_strEncrypt = DESEncrypt(m_strEncrypt, EncryptKey2);m_strEncrypt = DESEncrypt(m_strEncrypt, EncryptKey1);catch (Exception ex) throw ex; return m_strEncrypt;/ / 3DES 解密(基于DES,對(duì)一塊數(shù)據(jù)用三個(gè)不同的密鑰進(jìn)行三次加密,強(qiáng)度更高)/ / 待解密密文/ 密鑰一/ 密鑰二/ 密鑰三/ returnspublic static string D

49、ES3Decrypt(string DecryptString, string DecryptKey1, string DecryptKey2, string DecryptKey3)string m_strDecrypt = ;trym_strDecrypt = DESDecrypt(DecryptString, DecryptKey1);m_strDecrypt = DESDecrypt(m_strDecrypt, DecryptKey2);m_strDecrypt = DESDecrypt(m_strDecrypt, DecryptKey3);catch (Exception ex) t

50、hrow ex; return m_strDecrypt;/ / AES 加密(高級(jí)加密標(biāo)準(zhǔn),是下一代的加密算法標(biāo)準(zhǔn),速度快,安全級(jí)別高,目前 AES 標(biāo)準(zhǔn)的一個(gè)實(shí)現(xiàn)是 Rijndael 算法)/ / 待加密密文/ 加密密鑰/ public static string AESEncrypt(string EncryptString, string EncryptKey)if (string.IsNullOrEmpty(EncryptString) throw (new Exception(密文不得為空); if (string.IsNullOrEmpty(EncryptKey) throw (new Exception(密鑰不得為空); string m_strEncrypt = ;byte m_btIV = Convert.FromBase64String(Rkb4jvUy/ye7Cd7k89QQgQ=);Rijndael m_AESProvider = Rijndae

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論