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( " - " , "" );
}

转载于:https://www.cnblogs.com/EasyData/archive/2008/09/09/1287331.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值