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