詳解介紹C#是如何擷取檔案MD5與SHA1

來源:互聯網
上載者:User
之前剛開始學習編程的時候,總想著自己寫一些小軟體小工具。

而這個就是經典的檔案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);            }        }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.