在文件完整性中比较中,在网络上我们经常会看到一些文件的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 ---
}