C#創(chuàng)建文件的實(shí)戰(zhàn)應(yīng)用示例解析
由于Internet的開放性,C#創(chuàng)建文件的應(yīng)用很廣泛,如在任何文件在傳輸過(guò)程中都可能受到篡改,而且傳輸過(guò)程的不確定性,使得我們?nèi)狈τ行У姆椒ūWC傳輸文件的安全。那么如何找到解決問(wèn)題的方法呢?這里我們來(lái)談?wù)勈褂肅#創(chuàng)建文件的應(yīng)用。
為了避免上述情況,最普遍的做法是隨傳輸文件提供一個(gè)C#創(chuàng)建文件中的驗(yàn)證碼,用戶在收到文件后,通過(guò)重新計(jì)算文件驗(yàn)證碼并與原始驗(yàn)證碼比較,如果不匹配則表示文件在傳輸過(guò)程中發(fā)生了改變。下面,筆者就使用C#給大家演示一下具體的實(shí)現(xiàn)過(guò)程。
C#創(chuàng)建文件應(yīng)用一、創(chuàng)建FileStream
在構(gòu)建文件驗(yàn)證碼之前,首先需要加載文件,這就要用到.Net framework的FileStream類。在.Net framework下,文件都表示為一個(gè)Stream,即字節(jié)序列的抽象概念。而所有涉及文件的讀寫操作都通過(guò)Stream類的屬性和方法實(shí)現(xiàn)。下面,就是具體的實(shí)現(xiàn)代碼:
- FileStream fst= new FileStream(
- txtFile.Text,FileMode.Open,
- FileAccess.Read, FileShare.Read, 8192);
這里使用了FileStream構(gòu)建函數(shù)的一種重載方法,需要提一下的是最后一個(gè)參數(shù)值8192,該參數(shù)值定義的是緩沖區(qū)的大小,即當(dāng)文件大于8K時(shí),以8K為單位,對(duì)文件進(jìn)行分段讀取,以提高讀取文件的性能。
C#創(chuàng)建文件二、創(chuàng)建MD5對(duì)象
在成功創(chuàng)建FileStream對(duì)象之下,接下來(lái)就可以使用MD5類計(jì)算該對(duì)象的哈希值了。這個(gè)實(shí)現(xiàn)過(guò)程非常簡(jiǎn)單,只要先聲明一個(gè) MD5CryptoServiceProvider實(shí)例,然后使用ComputeHash方法完成計(jì)算過(guò)程,最后通過(guò)Hash屬性就可以得到計(jì)算好的字節(jié)數(shù)組了。
- ……
- 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#創(chuàng)建文件三、轉(zhuǎn)換驗(yàn)證碼字符串
由于MD5哈希算法返回的是一個(gè)字節(jié)數(shù)據(jù),因此需要轉(zhuǎn)換成字符串。以下就是具體實(shí)現(xiàn)的代碼。
- ……
- byte[] hash=md5.Hash;
- StringBuilder sb=new StringBuilder();
- foreach(byte byt in hash)
- {
- sb.Append(String.Format("{0:X1}", byt));
- }
- TextBox1.Text = sb.ToString();
- ……
在轉(zhuǎn)換過(guò)程中,首先定義了一個(gè)StringBuilder對(duì)象,這主要是處于性能上的考慮;接著遍歷MD5哈希值中的每個(gè)字節(jié),并使用String.Format方法直接將字節(jié)轉(zhuǎn)換成16進(jìn)制格式的字符串,最后輸出結(jié)果字符串即可。
注:通過(guò)本例生成的MD5驗(yàn)證碼與同類MD5驗(yàn)證碼校驗(yàn)工具在算法上完全一致,因此完全適用于實(shí)際應(yīng)用場(chǎng)合。
C#創(chuàng)建文件的應(yīng)用有很多,那么這次的應(yīng)用解決是不是很巧妙呢?希望對(duì)你了解和學(xué)習(xí)C#創(chuàng)建文件方面有所幫助。
【編輯推薦】