取得檔案的唯一檢查碼Checksum MD5 SHA

如果快速的使用MD5或SHA的加密方式,取得檔案的checksum來驗證檔案是否被異動過.

  最近因為在思考如何驗證取得的檔案與來源端相同,比對檔案大小是個方法,但不是很好,畢竟它也可能同大小,但內容不一樣,於是就想到Checksum這個名詞,大概找了一下網路上的資料,發現方法各有不同,所以算出來的結果也會不同,想來想去,反正來源端的checksum的運算方式只要同目的端,這樣就可以達成驗證的目標了.

  這次用的方法其實也很簡單,不論是MD5或SHA1都不過兩三行的程式即可達成,這次就用VS2008的C#,來用WinForm做Demo,這個功能會用到加密的功能,及讀檔的部份,所以用到以下幾個namespace.

using System.IO;

using System.Security.Cryptography;

 

SHA Code :

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                using (FileStream fs = File.OpenRead(openFileDialog1.FileName))
                {
                    SHA256Managed sha = new SHA256Managed();
                    txtResult.Text = Convert.ToBase64String(sha.ComputeHash(fs));
                    txtPath.Text = openFileDialog1.FileName;
                }
            }

MD5 Code :
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                using (FileStream fs = File.OpenRead(openFileDialog1.FileName))
                {
                    MD5 m = MD5.Create();
                    txtPath.Text = openFileDialog1.FileName;
                    txtResult.Text = Convert.ToBase64String(m.ComputeHash(fs));
                }
            }

  看一下MD5及SHA的程式碼幾乎一樣,但各會依據其加密方式取回checksum,如果檔案內容有所不同,則checksum就會不同,記得看過一篇討論,如果日期時間相同,就會產生相同的checksum,但從這程式碼中就可以發現,加密的來源是檔案內容,並不是檔案屬性,這也才是所要驗證的目的.

 

範例下載 : ChecksumTest.rar