/// <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;
}