zoukankan      html  css  js  c++  java
  • C# 获取文件MD5、SHA1

           /// <summary>
            /// 计算文件的 MD5 值
            /// </summary>
            /// <param name="fileName">要计算 MD5 值的文件名和路径</param>
            /// <returns>MD5 值16进制字符串</returns>
            public string MD5File(string fileName)
            {
                return HashFile(fileName, "md5");
            }
    
            /// <summary>
            /// 计算文件的 sha1 值
            /// </summary>
            /// <param name="fileName">要计算 sha1 值的文件名和路径</param>
            /// <returns>sha1 值16进制字符串</returns>
            public string SHA1File(string fileName)
            {
                return HashFile(fileName, "sha1");
            }
    
            /// <summary>
            /// 计算文件的哈希值
            /// </summary>
            /// <param name="fileName">要计算哈希值的文件名和路径</param>
            /// <param name="algName">算法:sha1,md5</param>
            /// <returns>哈希值16进制字符串</returns>
            private 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>
            private 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>
            private string ByteArrayToHexString(byte[] buf)
            {
                return BitConverter.ToString(buf).Replace("-","");
            }
  • 相关阅读:
    如何使标签a处于不可用状态
    document.referrer的使用和window.opener 跟 window.parent 的区别
    纯CSS让overflow:auto页面滚动条出现时不跳动
    闭包的使用实例
    VMware workstation使用小技巧
    个人命令简记
    中国剩余定理
    UVA 10603 倒水问题
    Haybale Stacking(差分数组 + 求中位数的一些方法 + nth_element)
    POJ 1511 Invitation Cards (最短路的两种方法spfa, Dij)
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/7307142.html
Copyright © 2011-2022 走看看