如果快速的使用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