在文件完整性中比較中,在網絡上我們經常會看到一些文件的MD5值用來比較下載的文件是否完整一致。這些算法是怎麼去實現的呢?下面就是實現的代碼片段
/// <summary>
/// 文件MD5值
/// </summary>
public static class FileMD5
{
#region --- MD5效驗碼方法 Begin ---
/// <summary>
/// 獲取MD5校驗碼
/// </summary>
/// <param name="fileName">文件完整路徑</param>
/// <returns>文件MD5值</returns>
public static string GetFileMD5(string fileName)
{
string md5str = "";
MD5 md5 = new MD5CryptoServiceProvider();
using (FileStream fst = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, 8192))
{
md5.ComputeHash(fst);
byte[] hash = md5.Hash;
StringBuilder sb = new StringBuilder();
foreach (byte byt in hash)
{
sb.Append(String.Format("{0:X1}", byt));
}
md5str = sb.ToString();
}
return md5str;
}
/// <summary>
/// 文件MD5驗證
/// </summary>
/// <param name="md5str">MD5值</param>
/// <param name="fileName">文件完整路徑</param>
/// <returns>驗證結果 True = 成功 False 失敗</returns>
public static bool FileMD5Calibration(string md5str, string fileName)
{
bool fc = false;
MD5 md5 = new MD5CryptoServiceProvider();
using (FileStream fst = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, 8192))
{
md5.ComputeHash(fst);
byte[] hash = md5.Hash;
StringBuilder sb = new StringBuilder();
foreach (byte byt in hash)
{
sb.Append(String.Format("{0:X1}", byt));
}
fc = md5str.Equals(sb.ToString());
}
return fc;
}
#endregion --- MD5效驗碼方法 End ---
}