之前剛開始學習程式設計的時候,總是想著自己寫一些小軟體小工具。
而這個就是經典的檔案MD5校驗,順便加上了一個SHA1。
在網路上下載一些東西時,會有作者提供MD5值。
它的作用就在於我們可以在下載該軟體後,對下載回來的檔案做一次MD5校驗,以確保我們獲得的檔案與該網站提供的檔案為同一檔案。
於是就需要一個MD5校驗工具,那麼就去百度上找,但是國內的下載站就不用說了...捆綁的東西防不勝防。
所以,身為一個程式設計師,就自己來寫一個吧。
分析這個小工具的主要需求是
1.根據路徑找到檔案
#2.取得MD5
3.取得SHA1
非常簡單的一個小工具,
第一個方法直接使用FileInfo 類別建構函式傳入路徑就可以了,因為是做控制台可以直接拖曳文件,這一點還是很方便的。
要注意的是路徑中有空格會報錯。
此方法中s 代表傳入的檔案路徑
static void GetFile(string s) { try { FileInfo fi = new FileInfo(s); Console.WriteLine("文件路径:{0}", s); Console.WriteLine("文件名称:{0}", fi.Name.ToString()); Console.WriteLine("文件类型:{0}", fi.Extension.ToString()); Console.WriteLine("文件大小:{0} K", fi.Length / 1024); Console.WriteLine("文件创建时间:{0}", fi.CreationTime.ToString()); Console.WriteLine("上次访问时间:{0}", fi.LastAccessTime.ToString()); Console.WriteLine("上次写入时间:{0}", fi.LastWriteTime.ToString()); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
第二個方法獲得MD5值,該方法中s 代表傳入的檔案路徑
MD5將整個文件當作一個大文本訊息,透過其不可逆的字串變換演算法,產生了這個唯一的MD5資訊摘要。
static void GetMD5(string s) { try { FileStream file = new FileStream(s,FileMode.Open); MD5 md5 = new MD5CryptoServiceProvider(); byte[] retval = md5.ComputeHash(file); file.Close(); StringBuilder sc = new StringBuilder(); for (int i = 0 ; i<retval.Length ; i++ ) { sc.Append(retval[i].ToString("x2")); } Console.WriteLine("文件MD5:{0}",sc); } catch(Exception ex) { Console.WriteLine(ex.Message); } }
第三個方法,獲得SHA1值,該方法中s 代表傳入的檔案路徑
SHA1名為安全雜湊演算法,對於長度小於2^64位元的訊息, SHA1會產生一個160位元的訊息摘要。
SHA1有以下特性:不可以從訊息摘要復原訊息;兩個不同的訊息不會產生同樣的訊息摘要,(但會有1x10 ^ 48分之一的機率出現相同的訊息摘要,一般使用時忽略)。
static void GetSHA1(string s) { try { FileStream file = new FileStream(s, FileMode.Open); SHA1 sha1 = new SHA1CryptoServiceProvider(); byte[] retval = sha1.ComputeHash(file); file.Close(); StringBuilder sc = new StringBuilder(); for (int i = 0; i < retval.Length; i++) { sc.Append(retval[i].ToString("x2")); } Console.WriteLine("文件SHA1:{0}", sc); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
以上是詳解介紹C#是如何取得文件MD5與SHA1的詳細內容。更多資訊請關注PHP中文網其他相關文章!