获取文件指定大小的MD5值 的几种方法

   /// <summary>
        /// 获取文件指定大小的MD5值
        /// </summary>
        /// <param name="fileStream">文件流</param>
        /// <param name="size">要读取的大小</param>
        /// <returns></returns>
        public static string GetFileMD5(Stream stream, long size)
        {
            try
            {

                byte[] buffer = new byte[size];
                stream.Read(buffer, 0, buffer.Length);

                using (var md5Provider = new System.Security.Cryptography.MD5CryptoServiceProvider())
                {
                    var hashByte = md5Provider.ComputeHash(buffer);
                    string result = BitConverter.ToString(hashByte);
                    result = result.Replace("-", "").ToLower();
                    return result;
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine("EDoc2.Sdk.Util.GetFileMD5(): " + ex);
            }

            return string.Empty;
        }

        /// <summary>
        /// 获取文件的MD5值
        /// </summary>
        /// <param name="fileStream">文件流</param>
        /// <returns>MD5Hash</returns>
        public static string GetFileMD5(Stream fileStream)
        {
            string md5 = string.Empty;
            try
            {
                int bufferSize = 1024 * 16;//自定义缓冲区大小16K
                byte[] buffer = new byte[bufferSize];
                using (var hashAlgorithm = new System.Security.Cryptography.MD5CryptoServiceProvider())
                {
                    int readLength;//每次读取长度
                    var output = new byte[bufferSize];
                    while ((readLength = fileStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        //计算MD5
                        hashAlgorithm.TransformBlock(buffer, 0, readLength, output, 0);
                    }
                    //完成最后计算,必须调用(由于上一部循环已经完成所有运算,所以调用此方法时后面的两个参数都为0)
                    hashAlgorithm.TransformFinalBlock(buffer, 0, 0);
                    md5 = BitConverter.ToString(hashAlgorithm.Hash);
                }
                md5 = md5.Replace("-", "").ToLower();
            }
            catch (Exception ex)
            {
                Console.WriteLine("EDoc2.Sdk.Util.GetFileMD5(): " + ex);
            }
            return md5;
        }

  

posted @ 2022-02-25 09:18  压力山大——Alex  阅读(147)  评论(0)    收藏  举报