之前剛開始學習編程的時候,總想著自己寫一些小軟體小工具。
而這個就是經典的檔案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); } }