[C#] MD5,SHA1,SHA256 驗證檔案正確
MD5,SHA1,SHA256 這三種加密方法,是不可逆的,也就是說它是一種採樣法
那能幹嘛?! 基本上就是驗證資料正確性,所以網路上很多破解法,理論上是用類似像是比對字典的方法去破解原始密碼是什麼,
這也是為什麼後期再使用MD5 會加入一些鹽巴(SALT) ,尤其是做網站的時候儲存密碼資料,如果使用MD5 ,都一定要加SALT..
其實採樣法很多種,目前這篇重點在於我怎麼去做出跟ubuntu 網站下載的iso 一樣的md5 認證碼..
因為那比較偏向一些機構會常用的採用方法,當然如果你是公司對公司,可以採取做法可能使用檔名+檔案大小或是一些meta data 去做雜湊即可
透過下列方式必須全部讀檔會較耗記憶體,當然如果公司對公司大量傳遞資料自己是可以自訂採樣方法…
我下載的檔案是
http://www.ubuntu-tw.org/download/download.php?distro=desktop&version=12.04&arch=i386
ubuntu 12.04 destop i386 ..
這時候就可以透過下列方法驗證 其實 MD5,SHA1,SHA256 Code 都一樣 只是要改不同的CryptoServiceProvider
MD5 :
var tragetFile = new System.IO.FileStream(@"C:\Users\Stark\Downloads\ubuntu-12.04-desktop-i386.iso", System.IO.FileMode.Open);
var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hashbytes = md5.ComputeHash(tragetFile);
tragetFile.Close();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < hashbytes.Length; i++)
{
sb.Append(hashbytes[i].ToString("x2"));
}
Response.Write(sb.ToString());
結果:
SHA1:
var tragetFile = new System.IO.FileStream(@"C:\Users\Stark\Downloads\ubuntu-12.04-desktop-i386.iso", System.IO.FileMode.Open);
var sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
byte[] hashbytes = sha1.ComputeHash(tragetFile);
tragetFile.Close();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < hashbytes.Length; i++)
{
sb.Append(hashbytes[i].ToString("x2"));
}
Response.Write(sb.ToString());
結果:
SHA256:
var tragetFile = new System.IO.FileStream(@"C:\Users\Stark\Downloads\ubuntu-12.04-desktop-i386.iso", System.IO.FileMode.Open);
var sha256 = new System.Security.Cryptography.SHA256CryptoServiceProvider();
byte[] hashbytes = sha256.ComputeHash(tragetFile);
tragetFile.Close();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < hashbytes.Length; i++)
{
sb.Append(hashbytes[i].ToString("x2"));
}
Response.Write(sb.ToString());
結果:
最後強調,採樣方式雙方協定即可,這方式會將檔案打開全部讀取後取雜湊值,所以自訂規則可以讓速度提升很多
因為網路上的檔案他會注重有惡意人士放入病毒重新包裝,所以這些下載機構才會務必做到全部驗證…
標籤:
C#
-- Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer. 如果這篇文章有幫助到您,簡單留個言,或是幫我按個讚,讓我有寫下去的動力...