由於Internet的開放性,C#建立檔案的應用很廣泛,如在任何檔案在傳輸過程中都可能受到篡改,而且傳輸過程的不確定性,使得我們缺乏有效方法保證傳輸檔案的安全。那麼如何找到解決問題的方法呢?這裡我們來談談使用C#建立檔案的應用。
為了避免上述情況,最普遍的做法是隨傳輸檔案提供一個C#建立檔案中的驗證碼,使用者在收到檔案後,通過重新計算檔案驗證碼並與原始驗證碼比較,如果不匹配則表示檔案在傳輸過程中發生了改變。下面,筆者就使用C#給大家示範一下具體的實現過程。
C#建立檔案應用一、建立FileStream
在構建檔案驗證碼之前,首先需要負載檔案,這就要用到.Net framework的FileStream類。在.Net framework下,檔案都表示為一個Stream,即位元組序列的抽象概念。而所有涉及檔案的讀寫操作都通過Stream類的屬性和方法實現。下面,就是具體的實現代碼:
- FileStream fst= new FileStream(
-
- txtFile.Text,FileMode.Open,
-
- FileAccess.Read, FileShare.Read, 8192);
這裡使用了FileStream構建函數的一種重載方法,需要提一下的是最後一個參數值8192,該參數值定義的是緩衝區的大小,即當檔案大於8K時,以8K為單位,對檔案進行分段讀取,以提高讀取檔案的效能。
C#建立檔案二、建立MD5對象
在成功建立FileStream對象之下,接下來就可以使用MD5類計算該對象的雜湊值了。這個實現過程非常簡單,只要先聲明一個 MD5CryptoServiceProvider執行個體,然後使用ComputeHash方法完成計算過程,最後通過Hash屬性就可以得到計算好的位元組數組了。
- ……
-
- MD5CryptoServiceProvider md5=
-
- new MD5CryptoServiceProvider();
-
- FileStream fst= new FileStream(txtFile.Text,FileMode.Open,
-
- FileAccess.Read, FileShare.Read, 8192);
-
- md5.ComputeHash(fst);
-
- byte[] hash=md5.Hash;
-
- ……
C#建立檔案三、轉換驗證碼字串
由於MD5雜湊演算法返回的是一個位元組資料,因此需要轉換成字串。以下就是具體實現的代碼。
- ……
-
- byte[] hash=md5.Hash;
-
- StringBuilder sb=new StringBuilder();
-
- foreach(byte byt in hash)
-
- {
-
- sb.Append(String.Format("{0:X1}", byt));
-
- }
-
- TextBox1.Text = sb.ToString();
-
- ……
在轉換過程中,首先定義了一個StringBuilder對象,這主要是處於效能上的考慮;接著遍曆MD5雜湊值中的每個位元組,並使用String.Format方法直接將位元組轉換成16進位格式的字串,最後輸出結果字串即可。