代碼實(shí)現(xiàn)文件加密方法(代碼加密是什么意思)
程序世界里的一切都是圍繞信息做的處理,信息的傳輸安全尤為重要.jwt作為一個(gè)可用作分布式的web Token解決方案,就是基于信息的加密解密做的,所以要從根本上理解jwt,那加密解密是繞不開(kāi)的一個(gè)話題.
在密碼學(xué)中, 加密(英語(yǔ):Encryption)是將明文信息改變?yōu)殡y以讀取的密文內(nèi)容,使之不可讀的過(guò)程。只有擁有解密方法的對(duì)象,經(jīng)由解密過(guò)程,才能將密文還原為正??勺x的內(nèi)容。理想情況下,只有經(jīng)授權(quán)的人員能夠讀取密文所要傳達(dá)的信息。加密本身并不能防止信息傳輸被截取,但加密能防止截取者理解其內(nèi)容。因?yàn)榉N種技術(shù)原因,加密方法通常使用一個(gè)通過(guò)算法生成的偽隨機(jī)密鑰。雖然任何加密后的消息都可能被破解,但對(duì)于一個(gè)良好的加密算法而言,破解需要相當(dāng)多的技術(shù)和算力。授權(quán)讀取信息的人可以輕松通過(guò)發(fā)信人所提供的密鑰解密信息,但未經(jīng)授權(quán)的人員則不行。密碼學(xué)歷史中有眾多加密方法;早期的加密方法常用于軍事通訊。從此開(kāi)始,現(xiàn)代計(jì)算中也出現(xiàn)了眾多加密技術(shù),并且加密在現(xiàn)代計(jì)算中也變得越來(lái)越常見(jiàn)。[1]現(xiàn)代的加密方式通常使用公鑰或?qū)ΨQ密鑰?,F(xiàn)代加密技術(shù)依賴現(xiàn)代計(jì)算機(jī)在破解密鑰上并不高效的事實(shí)來(lái)保證其安全性。
--維基百科
--維基百科
從維基百科的描述可知加密實(shí)際上是通過(guò)一系列計(jì)算將人類(lèi)可以理解的文字轉(zhuǎn)換成人類(lèi)無(wú)法直接理解的內(nèi)容,解密就是將加密后的內(nèi)容再還原回去的過(guò)程,理論上來(lái)說(shuō)不存在無(wú)法破解的密文.
2.分類(lèi):
對(duì)稱密鑰加密
在對(duì)稱密鑰加密方案中,加密和解密密鑰是相同的。通信方必須具有相同的密鑰才能實(shí)現(xiàn)安全通信。對(duì)稱密鑰的一個(gè)典型例子:德國(guó)軍方的恩尼格瑪密碼機(jī)。這種密碼機(jī)每天都有密鑰設(shè)置。當(dāng)盟軍弄清楚機(jī)器如何工作時(shí),他們能夠在發(fā)現(xiàn)給定日期傳輸?shù)募用苊荑€后立即解密消息中編碼的信息。
公鑰加密[俗稱 :非對(duì)稱加密]
在公鑰加密(即公開(kāi)密鑰加密)方案中,發(fā)布加密密鑰供任何人使用和加密消息。但是,只有接收方才能訪問(wèn)能夠讀取消息的解密密鑰。公鑰加密最早是在1973年的一份秘密文件中描述的[3]; 之前所有加密方案都是對(duì)稱密鑰加密(也稱為私鑰)。
3.在.net中的實(shí)現(xiàn)
所有加密相關(guān)的都在 System.Security.Cryptography類(lèi)庫(kù)下,本文所有代碼都需要引用System.Security.Cryptography
1.對(duì)稱密鑰加密
缺點(diǎn)加密解密雙方的密鑰是相同的,密鑰傳輸是一個(gè)非常大的問(wèn)題,唯一的密鑰泄漏后,就不再安全,相對(duì)來(lái)說(shuō)Aes加密計(jì)算更加復(fù)雜一些,被窮舉的可能性更低,本文在對(duì)稱密鑰加密中只介紹DES和Aes兩種
DES.Create方法創(chuàng)建的DES對(duì)象會(huì)有一個(gè)默認(rèn)的Key,在自己的項(xiàng)目中使用的時(shí)候,這個(gè)公鑰信息要保存好,確保加解密都使用相同的密鑰進(jìn)行即可. 所有加密類(lèi)都是基于byte[]做的,所以在做此類(lèi)封裝的時(shí)候,如果是針對(duì)字符串做加密,一定要統(tǒng)一字符編碼,加密用Utf8,解密也用Utf8.
DES實(shí)現(xiàn)加解密,密鑰要求是 byte[8]如下:
AES是由DES發(fā)展而來(lái)它比DES多了一個(gè)叫IV向量的東西,密鑰從原先的8位提升到了 32位,IV向量必須是 16位的.具體原理可以去翻文檔,同樣的Aes.Create也會(huì)默認(rèn)有一個(gè)IV和Key.
對(duì)稱密鑰加密在編碼中容易出錯(cuò)的地方就在密鑰的設(shè)置的時(shí)候,也許密鑰長(zhǎng)度還有其他可能或者組合,不去深究了.
2. 公鑰加密(非對(duì)稱加密)
展開(kāi)全文
相對(duì)于對(duì)稱密鑰加密,公鑰加密是一種全新的密碼方案,該方案中表示密鑰的有兩個(gè)一個(gè)私鑰一個(gè)公鑰,通過(guò)公鑰加密,只能通過(guò)私鑰進(jìn)行解密,相比對(duì)稱密鑰加密,公鑰加密不需要考慮密鑰傳輸?shù)膯?wèn)題,所以也就不存在密鑰泄漏的問(wèn)題,在微軟文檔中有明確提示,不應(yīng)在任何情況下以明文形式保存私鑰,建議的方案是將私鑰保存到本機(jī)的私鑰管理器中,不過(guò)為了寫(xiě)出下邊的代碼,我決定不接受他的建議
RSA.Create 同樣會(huì)生成默認(rèn)的公鑰和私鑰,想讓別人使用自己頒發(fā)的公鑰,用這個(gè)生成就行了,
stringtest = "你好開(kāi)發(fā)者"; byte[] encryptedSymmetricKey = rsa.Encrypt(Encoding.UTF8.GetBytes(test), RSAEncryptionPadding.Pkcs1); Console.WriteLine( $"加密后的數(shù)據(jù): {Convert.ToBase64String(encryptedSymmetricKey)}" );
/*解密*/varrasDes = RSA.Create; //導(dǎo)入私鑰解密rasDes.ImportRSAPrivateKey(Convert.FromBase64String(prikey), outintbytesRead2); vardes = rasDes.Decrypt(encryptedSymmetricKey, RSAEncryptionPadding.Pkcs1); Console.WriteLine( $"解密后的數(shù)據(jù): {Encoding.UTF8.GetString(des)}" );
可以看到確實(shí)如描述一般,公鑰加密后就能通過(guò)私鑰解密了.
3. Hash摘要算法
hash摘要算法不能算到加密解密中,因?yàn)榛谒挠?jì)算是不可逆的,在一定數(shù)據(jù)范圍[]內(nèi)不重復(fù),但不保證不一樣的兩個(gè)明文不會(huì)被計(jì)算為一個(gè)結(jié)果.所以在加密解密家族群里,它是妥妥的滅絕師太,渣男,只管加密不管解.,一個(gè)比較重要的特點(diǎn)就是 通過(guò)摘要算法計(jì)算可以將不同長(zhǎng)度的數(shù)據(jù)計(jì)算為一個(gè)固定位長(zhǎng)度的byte數(shù)組.一般用于保存密碼,等永遠(yuǎn)沒(méi)有查看需求的地方.就算拿到加密串你也拿它沒(méi)轍.最常見(jiàn)的就是MD5,其實(shí)還有好多,好在.net已經(jīng)將這些常用的都做了封裝.代碼如下:
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。