• c#计算文件的MD5值


    代码:

            /// <summary>
            /// 计算文件的 MD5 值
            /// </summary>
            /// <param name="fileName">要计算 MD5 值的文件名和路径</param>
            /// <returns>MD5 值16进制字符串</returns>
            public static string MD5File(string fileName)
            {
                return HashFile(fileName, "md5");
            }
    
            /// <summary>
            /// 计算文件的哈希值
            /// </summary>
            /// <param name="fileName">要计算哈希值的文件名和路径</param>
            /// <param name="algName">算法:sha1,md5</param>
            /// <returns>哈希值16进制字符串</returns>
            public static string HashFile(string fileName, string algName)
            {
                if (!System.IO.File.Exists(fileName))
                    return string.Empty;
    
                System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
                byte[] hashBytes = HashData(fs, algName);
                fs.Close();
                return ByteArrayToHexString(hashBytes);
            }
    
            /// <summary>
            /// 计算哈希值
            /// </summary>
            /// <param name="stream">要计算哈希值的 Stream</param>
            /// <param name="algName">算法:sha1,md5</param>
            /// <returns>哈希值字节数组</returns>
            public static byte[] HashData(System.IO.Stream stream, string algName)
            {
                System.Security.Cryptography.HashAlgorithm algorithm;
                if (algName == null)
                {
                    throw new ArgumentNullException("algName 不能为 null");
                }
                if (string.Compare(algName, "sha1", true) == 0)
                {
                    algorithm = System.Security.Cryptography.SHA1.Create();
                }
                else
                {
                    if (string.Compare(algName, "md5", true) != 0)
                    {
                        throw new Exception("algName 只能使用 sha1 或 md5");
                    }
                    algorithm = System.Security.Cryptography.MD5.Create();
                }
                return algorithm.ComputeHash(stream);
            }
    
            /// <summary>
            /// 字节数组转换为16进制表示的字符串
            /// </summary>
            public static string ByteArrayToHexString(byte[] buf)
            {
                string returnStr = "";
                if (buf != null)
                {
                    for (int i = 0; i < buf.Length; i++)
                    {
                        returnStr += buf[i].ToString("X2");
                    }
                }
                return returnStr;
            }  
    

      备注:文件越大,耗费时间越多。一个几KB的文件计算一次需要100毫秒左右,大文件没试过。

  • 相关阅读:
    poj 2488 A Knight&#39;s Journey(dfs+字典序路径输出)
    Git-删除本地文件夹的repository(本地仓库)
    Unique path ii
    jeecms使用小结
    jeecms9自定义标签以及使用新创建的数据库表
    Jeecms网站直接访问html静态页面
    jeecms系统使用介绍——jeecms中的内容、栏目、模型之间的关系
    jeecms内容管理系统使用了哪些技术
    jeecms附件标签用法
    jeecms v8 网站访问量配置
  • 原文地址:https://www.cnblogs.com/wishFreedom/p/3258285.html
Copyright © 2020-2023  润新知