數(shù)據(jù)加密學(xué)習(xí)總結(jié)_第1頁(yè)
數(shù)據(jù)加密學(xué)習(xí)總結(jié)_第2頁(yè)
數(shù)據(jù)加密學(xué)習(xí)總結(jié)_第3頁(yè)
數(shù)據(jù)加密學(xué)習(xí)總結(jié)_第4頁(yè)
數(shù)據(jù)加密學(xué)習(xí)總結(jié)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

黑馬程序員數(shù)據(jù)加密學(xué)習(xí)對(duì)稱(chēng)加密算法:對(duì)稱(chēng)加密(也叫私鑰加密)指加密和解密使用相同密鑰的加密算法。有時(shí)又叫傳統(tǒng)密碼算法,就是加密密鑰能夠從解密密鑰中推算出來(lái),同時(shí)解密密鑰也可以從加密密鑰中推算出來(lái)。而在大多數(shù)的對(duì)稱(chēng)算法中,加密密鑰和解密密鑰是相同的,所以也稱(chēng)這種加密算法為秘密密鑰算法或者單密鑰算法。它要求發(fā)送方和接收方在安全通信之前,商定一個(gè)密鑰。對(duì)稱(chēng)算法的安全性依賴(lài)于密鑰,泄漏密鑰就意味著任何人都可以對(duì)他們發(fā)送或者接收的消息解密,所以密鑰的保密性對(duì)通信性至關(guān)重要。對(duì)稱(chēng)加密算法的優(yōu)點(diǎn)在于加解密的高速度和使用長(zhǎng)密鑰時(shí)的難破解性。不足之處是,交易雙方都使用同樣鑰匙,安全性得不到保證。非對(duì)稱(chēng)加密算法:非對(duì)稱(chēng)加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)o公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,惟獨(dú)用對(duì)應(yīng)的私有密鑰才干解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那末惟獨(dú)用對(duì)應(yīng)的公開(kāi)密鑰才干解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱(chēng)加密算法。非對(duì)稱(chēng)密碼體制的特點(diǎn):算法強(qiáng)度復(fù)雜、安全性依賴(lài)于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒(méi)有對(duì)稱(chēng)加密解密的速度快。對(duì)稱(chēng)密碼體制中惟獨(dú)一種密鑰,并且是非公開(kāi)的,如果要解密就得讓對(duì)方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對(duì)稱(chēng)密鑰體制有兩種密鑰,其中一個(gè)是公開(kāi)的,這樣就可以不需要像對(duì)稱(chēng)密碼那樣傳輸對(duì)方的密鑰了。這樣安全性就大了不少。加密模式:電子密碼本(ElectronicCodeBook,ECB):在ECB模式中,每塊明文都是獨(dú)立于其他塊加密的。雖然這樣做比較高效(可以并行執(zhí)行多個(gè)數(shù)據(jù)塊的加密)但這種方法有一個(gè)很大的問(wèn)題。例如,在ECB模式中,對(duì)相同明文塊的加密總是產(chǎn)生相同的密文塊,這為某些類(lèi)型的密碼分析攻擊打開(kāi)了方便之門(mén)。ECB方式通常被認(rèn)為不適合保護(hù)敏感數(shù)據(jù)。密碼塊鏈接(CipherBlockChaining,CBC):在CBC模式中,文本塊是連續(xù)加密的,在加密當(dāng)前明文塊之前,用前一次塊加密的結(jié)果修改當(dāng)前明文塊。這個(gè)過(guò)程改進(jìn)了加密的一些特征(例如,相同的明文塊不會(huì)產(chǎn)生相同的密文塊),但是由于其加密過(guò)程是連續(xù)的,CBC方式不支持加密的并行化。CBC方式使用一個(gè)稱(chēng)作初始化向量(InitializationVector,IV)的附加文本來(lái)開(kāi)始鏈接過(guò)程。IV用于修改被加密的第一個(gè)明文塊。密碼反饋(CipherFeedback,CFB):在CFB模式中,先加密前一個(gè)塊,然后將得到的結(jié)果與明文相結(jié)合產(chǎn)生當(dāng)前塊,從而有效地改變用于加密當(dāng)前塊的密鑰。這里密鑰的值是不斷變化的,這個(gè)過(guò)程與流加密類(lèi)似,但是性能則遠(yuǎn)不如流加密。與CBC方式一樣,這里要使用一個(gè)初始化向量作為加密過(guò)程的種子。輸出反饋(OutputFeedback,OFB):在OFB方式中,使用一個(gè)種子或者IV來(lái)開(kāi)始加密過(guò)程。加密種子后,將加密結(jié)果與明文塊結(jié)合產(chǎn)生密文。之后被加密的種子再度被加密,如此重復(fù)此過(guò)程,直到遍及全部明文。同樣,結(jié)果類(lèi)似于流加密密碼文本竊用(CipherTextSteal):模式處理任何長(zhǎng)度的純文本并產(chǎn)生長(zhǎng)度與純文本長(zhǎng)度匹配的密碼文本。除了最后兩個(gè)純文本塊外,對(duì)于所有其他塊,此模式與CBC模式的行為相同。DES:數(shù)據(jù)加密標(biāo)準(zhǔn)(DES,DataEncryptionStandard)是一種使用密鑰加密的塊密碼,它基于使用56位密鑰的對(duì)稱(chēng)算法。DES現(xiàn)在已經(jīng)不被視為一種安全的加密算法,主要因?yàn)樗褂玫?6位密鑰過(guò)短。為了提供實(shí)用所需的安全性,可以使用DES的派生算法3DES來(lái)進(jìn)行加密,在2001年,DES作為一個(gè)標(biāo)準(zhǔn)已經(jīng)被高級(jí)加密標(biāo)準(zhǔn)(AES)所取代。///〈summary〉III使用DES加密字符串III</summary>///<paramname="sourc一”>要力口密的字符串</param>III<paramname="key”>力口密密匙</param>III〈returns〉加密后的字符串</returns>privatestaticstringEncryptByDES(stringsource,stringkey){byte[]input=Encoding.Default.GetBytes(key);byte[]temp=newbyte[16]{200,200,200,200z200,200,200,200,200,200,200,200z200,200,200,200};if(input.Length>16)(Console.WriteLin”e只(能輸入8個(gè)漢字或者16個(gè)字符!”);returnnull;)input.CopyTo(temp,);DESCryptoServiceProvidercryptoServicenewDESCryptoServiceProvider();//實(shí)例化DES力口密月艮務(wù)類(lèi)cryptoService.Mode=CipherMod一.CB/C/;使用的加密模式cryptoService.IV=temp.Tak8一)(.ToArray();//定義偏移量cryptoService.Key=temp.Ski^)(,ToArray();//定義密鑰ICryptoTransformencryptor=cryptoService.CreateEncryptor(/)/;用加密服務(wù)對(duì)象創(chuàng)建一個(gè)對(duì)流執(zhí)行加密轉(zhuǎn)換的加密器byte[]byteArr=Encoding.Default.GetBytes(source);//把源字符串放至ll字節(jié)數(shù)組中returnConvert.ToBase64String(encryptor.TransformFinalBlock(byteArr,0,byteArr.Length));//使用加密器加密數(shù)據(jù))III<summary>III使用DES解密字符串III</summary>///<paramname="source”>要解密的字符串</param>Ill<paramname="key”>解密密匙</param>III<r一turns〉解密后的字符串〈/工一turns〉privatestaticstringDecryptByDES(stringsource,stringkey)(byte[]input=Encoding.Default.GetBytes(key);byte[]temp=newbyte[16]{200,200,200,200,200z200,200,200,200,200,200z200,200,200,200,200};if(input.Length>16)(Console.WriteLin”一錯(cuò)(誤的密匙”);returnnull;)input,CopyTo(temp;);DESCryptoServiceProvidercryptoServicenewDESCryptoServiceProvider();cryptoService.Mode=CipherMode.CBC;cryptoService.IV=temp.Tak8)(.ToArray();cryptoService.Key=temp.SkiB)(.ToArray();byte[]byteArr=Convert.FromBase64String(source);//把源字符串放至Ll字節(jié)數(shù)組中ICryptoTransformdecryptor=cryptoService.CreateDecryptor(/)/;使用加密服務(wù)對(duì)象創(chuàng)建一個(gè)對(duì)流執(zhí)行解密轉(zhuǎn)換的解密器returnEncoding.Default.GetString(decryptor.TransformFinalBlock(byteArr,0,byteArr.Length));//使用解密器解密數(shù)據(jù),密匙錯(cuò)誤會(huì)拋異常)SI3DES:(或者稱(chēng)為T(mén)ripleDES)是三重?cái)?shù)據(jù)加密算法(TDEA,TripleDataEncryptionAlgorithm)塊密碼的通稱(chēng)。它相當(dāng)于是對(duì)每一個(gè)數(shù)據(jù)塊應(yīng)用三次DES加密算法。由于計(jì)算機(jī)運(yùn)算能力的增強(qiáng),原版DES密碼的密鑰長(zhǎng)度變得容易被暴力破解;3DES即是設(shè)計(jì)用來(lái)提供一種相對(duì)簡(jiǎn)單的方法,即通過(guò)增加DES的密鑰長(zhǎng)度來(lái)避免類(lèi)似的攻擊,而不是設(shè)計(jì)一種全新的塊密碼算法。圈〃/〈summary〉III使用DES加密字符串III</summary>III<param11己1110="50皿00,,>要加密的字符串<勺—己]11>III<paramname="key”〉力口密密匙</param〉///〈returns〉力PI密后的字符串〈/returns〉publicstaticstringEncryptBy3DES(stringsource,stringkey)(RegexregnewRegex(@n[\w\W]{0,8}");Matchcollectionmatchs=reg.Matches(key);stringresult=source;foreach(Matchmatchinmatchs)(result=EncryptByDES(result,match.ToString());)returnresult;}///<summary>III使用DES解密字符串///</summary>///〈paramnam一="sourc一”〉要解密的字符串</param>///<paramnam一="k一y”>解密密匙</param>III〈returns〉解密后的字符串</1;巳5]:口5>publicstaticstringDecryptBy3DES(stringsource,stringkey)(RegexregnewRegex(@n[\w\W]{0z8}n);Matchcollectionmatchs=reg.Matches(key);stringresult=source;for(inti=matchs.Count-1;i>=0;i-一)(result=DecryptByDES(result,matchs[i].ToString());)returnresult;)散列:Hash,普通翻譯做“散列”,也有直接音譯為“哈?!钡?,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射,pre-image),通過(guò)散列算法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,而不可能從散列值來(lái)惟一的確定輸入值。簡(jiǎn)單的說(shuō)就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。散列函數(shù)的性質(zhì):所有散列函數(shù)都有如下一個(gè)基本特性:如果兩個(gè)散列值是不相同的(根據(jù)同一函數(shù)),那么這兩個(gè)散列值的原始輸入也是不相同的。這個(gè)特性是散列函數(shù)具有確定性的結(jié)果。但另一方面,散列函數(shù)的輸入和輸出不是一一對(duì)應(yīng)的,如果兩個(gè)散列值相同,兩個(gè)輸入值很可能是相同的,但并不能絕對(duì)肯定二者一定相等。輸入一些數(shù)據(jù)計(jì)算出散列值,然后部份改變輸入值,一個(gè)具有強(qiáng)混淆特性的散列函數(shù)會(huì)產(chǎn)生一個(gè)徹底不同的散列值。典型的散列函數(shù)都有無(wú)限定義域,比如任意長(zhǎng)度的字節(jié)字符串,和有限的值域,比如固定長(zhǎng)度的比特串。在某些情況下,散列函數(shù)可以設(shè)計(jì)成具有相同大小的定義域和值域間的一一對(duì)應(yīng)。一一對(duì)應(yīng)的散列函數(shù)也稱(chēng)為羅列??赡嫘钥梢酝ㄟ^(guò)使用一系列的對(duì)于輸入值的可逆“混合”運(yùn)算而得到SHA-1及其他:SHA1對(duì)長(zhǎng)度小于264的輸入,產(chǎn)生長(zhǎng)度為160bit的散列值,因此抗窮舉(brute-force)性更好。SHA-1設(shè)計(jì)時(shí)基于和MD4相同原理,并且摹仿了該算法。散列是一種單向算法,一旦數(shù)據(jù)被轉(zhuǎn)換,將無(wú)法再獲得其原始值,只能對(duì)加密后的數(shù)據(jù)進(jìn)行比較。MD5:MD5是Rivest于1991年對(duì)MD4的改進(jìn)版本。它對(duì)輸入仍以512位分組,其輸出是4個(gè)32位字的級(jí)聯(lián),與MD4相同。MD5比MD4來(lái)得復(fù)雜,并且速度較之要慢一點(diǎn),但更安全,在抗分析和抗差分方面表現(xiàn)更好。ml///〈summary〉III使用SHA1加密III〈/summary〉///<param 要力□密的字符串</^a£合111〉///〈returns〉加密后的字符串〈/returns〉publicstaticstringEncryptBySHAl(stringsource)(SHA1shalnewSHAlCryptoServiceProvider();byte[]byteArr=shal.ComputeHash(Encoding.Default.GetBytes(source));shal,Clear();returnConvert.ToBase64String(byteArr);)III<summary>III使用SHA256加密III</summary>III<paramname="source”>要力口密的字符串〈/param>III〈returns〉力口密后的字符串〈/returns〉publicstaticstringEncryptBySHA256(stringsource)(SHA256sha256RewSHA256CryptoServiceProvider();byte[]byteArr=sha256.ComputeHash(Encoding.Default.GetBytes(source));sha256.Clear();returnConvert.ToBase64String(byteArr);)///<summary>III使用SHA384加密III〈/summary〉///<paramname="source”>要力U密的字符串</param>///〈returns>力口密后的字符串〈/returns〉publicstaticstringEncryptBySHA384(stringsource)(SHA384sha384newSHA384CryptoServiceProvider();byte[]byteArr=sha384.ComputeHash(Encoding.Default.GetBytes(source));sha384.Clear();returnConvert.ToBase64String(byteArr);}III<summary>〃/使用SHA512加密III</summary>III<paramname="sourc一”〉要力口密的字符串</param〉///〈returns)加密后的字符串(/returns〉publicstaticstringEncryptBySHA512(stringsource){SHA512sha512newSHA512CryptoServiceProvider();byte[]byteArr=sha512.ComputeHash(Encoding.Default.GetBytes(source));sha512,Clear();returnConvert.ToBase64String(byteArr);)///<summary>///使用MD5加密III</summary>///<param 要力口密的字符串</param>///<r一turns〉加密后的字符串〈/returns〉publicstaticstringEncryptByMD5(stringsource)(MD5md5newMD5CryptoServiceProvider();byte[]byteArr=md5.ComputeHash(Encoding.Default.GetBytes(source));md5.Clear();returnConvert.ToBase64String(byteArr);)AES:密碼學(xué)中的高級(jí)加密標(biāo)準(zhǔn)(AdvancedEncryptionStandard.AES)是一種區(qū)塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。高級(jí)加密標(biāo)準(zhǔn)已然成為對(duì)稱(chēng)密鑰加密中最流行的算法之一。它可以使用128、192和256位密鑰。(16字節(jié)、24字節(jié)、32字節(jié))///〈summary〉III使用AES加密字符串///〈/summary〉///〈paramnam^="source”>要力口密的字符串</param>///<paramname="key”〉力U密密匙</param>III<r一turns〉力口密后的字符串〈/returns〉privatestaticstringEncryptAES(stringsource,stringkey)(byte[]input=Encoding.Default.GetBytes(key);byte[]temp=newbyte[32]{200,200,200z200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200z200,200z200};input.CopyTo(temp.);RijndaelManagedaesnewRijndaelManaged();aes.Mode=CipherMode.CBC;aes.Key=temp.Takd*£).ToArray();aes.IV=temp.Skip再).ToArray();ICryptoTransformcTransform=aes.CreateEncryptor();byte[]byteArr=Encoding.Default.GetBytes(source);returnConvert.ToBase64String(cTransform.TransformFinalBlock(byteArr,0,byteArr.Length));}III〈summary〉///使用AES解密字符串///</summary>III<paramnam一="source”〉要解密的字符串</param〉///<paramname="key”>解密密匙<々己二己!11>III<r一turns〉解密后的字符串〈/returns〉privatestaticstringDecryptAES(stringsource,stringkey)byte[]input=Encoding.Default.GetBytes(key);200,200,byte[]temp=newbyte200,200,200,200,200,200,200,200,200,200z200,200,200,200,200,200,200,200,200,200,200,200z200,200,200};input.CopyTo(temp>);RijndaelManagedaesnewRijndaelManaged();aes.Mode=CipherMode.CBC;aes.Key=temp.Tak(bf-).ToArray();aes.IV=temp.Ski由f).ToArray();ICryptoTransformcTransform=aes.CreateDecryptor();byte[]byteArr=Convert.FromBase64String(source);returnEncoding.Default.GetString(cTransform.TransformFinalBlock(byteArr,0,byteArr.Length));}同RSA:RSA加密算法是一種非對(duì)稱(chēng)加密算法,惟獨(dú)短的RSA鑰匙才可能被強(qiáng)力方式破解。還沒(méi)有任何可靠的攻擊RSA算法的方式,只要其鑰匙的長(zhǎng)度足夠長(zhǎng),用RSA加密的信息實(shí)際上是不能被破解的。RSA算法是第一個(gè)能同時(shí)用于加密和數(shù)字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現(xiàn)在的三十多年里,經(jīng)歷了各種攻擊的考驗(yàn),逐漸為人們接受,普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。由于進(jìn)行的都是大數(shù)計(jì)算,使得RSA最快的情況也比DES慢上好幾倍,無(wú)論是軟件還是硬件實(shí)現(xiàn)。速度向來(lái)是RSA的缺陷。///〈summary〉///使用RSA加密字符串III</summary>III<paramname="source”>要力口密的字符串〈/param>///<paramn—”publicK一y”>生成的公匙</param>III<paramname=nprivat

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論