四、執行加密/解密 .NET加密技術要求密鑰有確定的長度,例如,DES(Data Encryption Standard)函數要求密鑰的長度是64位,Rijndael則要求128、192或256位長度的密鑰。密鑰越長,加密強度越高。對于DES之外的加密算法,查詢LegalKeySizes屬性即可得到它允許的密鑰長度,包括MinSize(支持的最小密鑰長度)、MaxSize(最大密鑰長度)、SkipSize(增量)。SkipSize表示密鑰最大長度和最小長度之間可用長度的間隔,例如,Rijndael算法的SkipSize值是64位。 利用下面的代碼可以得到密鑰的長度信息: ' 創建DES加密對象 MsgBox("加密類型=" & des.ToString() & Chr(13) & "minsize = " & fd(0).MinSize & Chr(13) & _
圖二
圖三 說明:DES算法要求輸入一個8字節的密碼,但實際使用的密鑰只有56位(7個字節),每一個字節的最后一位不用(它作為校驗位使用,但不用于實際的加密過程)。 下面的代碼開始生成本文示例程序的密鑰: Public Class Form1
Sub CreateKey(ByVal strKey As String)
那么,初始向量究竟起什么作用呢?這個字節數組有8個元素,就象密鑰一樣,但向量和密鑰的作用是不同的,向量用來避免DES之類的算法一個特有的問題。在DES之類的算法中,原始數據被分成8字節一塊然后分別處理。DES在加密一塊數據時,要用到前一塊數據的模式,也就是說,如果改動了原始數據中第一塊的某個字符,所有后繼的塊的內容都將隨之改變,從而避免了一系列相連接的塊中出現重復塊的問題。 例如,假設你一時高興,發了一個郵件,內容只有幾個重復的單詞“Melanie! Melanie! Melanie! Melanie!”,在密鑰和塊序列中前一塊的共同作用下,加密之后的密文不會出現重復現象。然而,進一步考慮這個加密過程可以發現,如果用同一個密鑰加密多個郵件,且郵件開頭的問候語都相同,則郵件開頭的一部分很容易受到攻擊。由于這個原因,我們用初始向量來模擬前一個塊。 本文加密/解密工具中的下面這段代碼示范了如何加密文件: Sub Encrypt(ByVal inName As String , ByVal outName As String ) ' 創建加密對象 Catch e As Exception
加密過程與解密過程的唯一重要區別是,執行解密時,我們將使用DESCryptoServiceProvider對象的另一個方法CreateDecryptor,除此之外,兩者其余的處理步驟(包括參數,文件流,等等)基本相同。 五、防止破解 黑客和密碼專家破解加密文件的辦法主要有兩個,第一是搜索密文是否有重復現象,第二是用暴力破解法獲得密鑰。首先我們考慮一下初始向量如何防止重復現象,然后再探討一下防止暴力破解的關鍵問題。 破解密文的第一種方式是搜索樣本——特別是重復的樣本。人們在寫信的時候總是喜歡用同樣的文字開頭,例如“親愛的XXX”、“Dear Sir”等,如果多個郵件的開頭文字相同且通過同一密鑰加密,則每個密文信件的開頭也相同。假設Antonio寫給Melanie的所有加密信件都有相同的問候語“@4^F (2$@Fx”,解密者就會首先檢查開頭的幾個單詞是不是“Dear Melanie”。解密機密文件的一個重要步驟就是猜測文件中應當會出現的幾個單詞,所以我們不應該給解密者提供這種方便。在本文的示例中,初始向量的內容被附加到文件的開頭,從而防止了出現重復現象。只有信件的開頭才容易受到此類攻擊。 計算機的運算速度和精度要遠遠超過人,特別擅長處理一些重復的任務,例如嘗試每一種可能的密鑰組合最終破解密鑰。DES加密算法本身是不安全的,這種加密算法早在70年代就已經公之于眾。而且,破解者如果想要讓搜索密鑰的過程自動化,同樣可以方便地運用.NET的DESCryptoServiceProvider類。 對于一個128位、結合運用密鑰/初始向量的加密方案,計算機嘗試每一種可能的密鑰組合要花多少時間?專家們的看法并不一致,有人認為需要數月,也有人認為裝有專用硬件的價值6位數的計算機每秒能夠驗證數十億個密鑰,破解DES密文只需數小時。如果你的機密值得花數月時間去破解,那么最好改用TripleDES或其他加密算法。從TripleDES的名字也可以猜出,這種加密方式采用三重數據加密標準算法,所以密鑰的長度是192位,而不是64位的DES密鑰。記住,在其他條件相同的情況下,密鑰越長,安全程度越高。 結束語:現在你已經了解了.NET DES加密算法的使用過程,接下去可以研究.NET的其他安全功能,包括極具吸引力的公用密鑰加密方案。雖然公用密鑰加密方案執行起來速度慢一些,但加密效果一般要比TripleDES好。本人沒有什么機密值得運用DES之外的算法,不過你的要求可能有所不同。 |
文章來源于領測軟件測試網 http://www.kjueaiud.com/