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