C#讀取文件MD5值的實(shí)現(xiàn)代碼
本文介紹一個(gè)C#函數(shù),可以實(shí)現(xiàn)計(jì)算文件的MD5值,可以用于文件傳輸后進(jìn)行有效性校驗(yàn)。
我們知道可以通過(guò)將一個(gè)字符串進(jìn)行散列(Hash)運(yùn)算得到一個(gè)32位字符串,將其作為密碼來(lái)保存是最常見(jiàn)的MD5應(yīng)用。不知道大家有沒(méi)有注意到,在網(wǎng)上一些下載文件的地方,旁邊注明了MD5校驗(yàn)值,也是一個(gè)32位十六制字符串。這個(gè)字符串怎么用呢?這就是文件的MD5加密。
當(dāng)我們將一個(gè)文件從網(wǎng)上下載之后 ,可以計(jì)算一下文件的MD5值,然后和網(wǎng)上公布的MD5值進(jìn)行對(duì)比。結(jié)果一致,表示文件沒(méi)有問(wèn)題,如果結(jié)果不一致,有兩種可能,一是文件損壞了,無(wú)法使用;還有一種情況,那就是文件被人替換了。在下載exe文件時(shí)尤其應(yīng)該注意,如果下載了一個(gè)被人替換過(guò)后的文件,那是相當(dāng)危險(xiǎn)的事,可能這個(gè)文件就被人植入了木馬。
那么應(yīng)該怎么來(lái)計(jì)算文件的MD5值呢?洪哥給出了一段C#的源代碼。有興趣的朋友參考參考。注意,下面這段代碼要包含System.IO命名空間。
/// <summary>
/// 計(jì)算文件的MD5校驗(yàn)
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static string GetMD5HashFromFile(string fileName)
{
try
{
FileStream file = new FileStream(fileName, FileMode.Open);
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
}
catch (Exception ex)
{
throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);
}
}
大家可以看到,上面C#代碼主要?jiǎng)?chuàng)建了System.Security.Cryptography.MD5類,使用了它的ComputeHash方法。然后將字節(jié)數(shù)組轉(zhuǎn)換成16進(jìn)制字符串返回。
大家可以通過(guò)上面的主要函數(shù),自己用C#寫一個(gè)計(jì)算文件MD值的小程序了。
關(guān)于C#計(jì)算文件MD5值的代碼,本文就介紹這么多,希望對(duì)您有所幫助,謝謝!
相關(guān)文章
C#實(shí)現(xiàn)讀取二維數(shù)組集合并輸出到Word預(yù)設(shè)表格
這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)讀取二維數(shù)組集合并輸出到Word預(yù)設(shè)表格,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
異步/多線程/任務(wù)/并行編程之一:如何選擇合適的多線程模型?
本篇文章小編為大家介紹,異步/多線程/任務(wù)/并行編程之一:如何選擇合適的多線程模型?需要的朋友參考下2013-04-04
C#WinFrom導(dǎo)出Excel過(guò)程解析
這篇文章主要介紹了C#WinFrom導(dǎo)出Excel過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11

