架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 26722|回复: 4

[资料] C# 获取文件MD5、SHA1的值

[复制链接]
发表于 2016-7-15 17:07:34 | 显示全部楼层 |阅读模式
  1. /// <summary>
  2.     /// 文件校验
  3.     /// </summary>
  4.     public class FileCheck
  5.     {
  6.         /// <summary>
  7.         /// 计算文件的 MD5 值
  8.         /// </summary>
  9.         /// <param name="fileName">要计算 MD5 值的文件名和路径</param>
  10.         /// <returns>MD5 值16进制字符串</returns>
  11.         public string MD5File(string fileName)
  12.         {
  13.             try
  14.             {
  15.                 return HashFile(fileName, "md5");
  16.             }
  17.             catch {
  18.                 return null;
  19.             }
  20.         }

  21.         /// <summary>
  22.         /// 计算文件的 sha1 值
  23.         /// </summary>
  24.         /// <param name="fileName">要计算 sha1 值的文件名和路径</param>
  25.         /// <returns>sha1 值16进制字符串</returns>
  26.         public string SHA1File(string fileName)
  27.         {
  28.             try
  29.             {
  30.                 return HashFile(fileName, "sha1");
  31.             }
  32.             catch {
  33.                 return null;
  34.             }
  35.         }

  36.         /// <summary>
  37.         /// 计算文件的哈希值
  38.         /// </summary>
  39.         /// <param name="fileName">要计算哈希值的文件名和路径</param>
  40.         /// <param name="algName">算法:sha1,md5</param>
  41.         /// <returns>哈希值16进制字符串</returns>
  42.         private string HashFile(string fileName, string algName)
  43.         {
  44.             if (!System.IO.File.Exists(fileName))
  45.                 return string.Empty;

  46.             System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
  47.             byte[] hashBytes = HashData(fs, algName);
  48.             fs.Close();
  49.             return ByteArrayToHexString(hashBytes);
  50.         }

  51.         /// <summary>
  52.         /// 计算哈希值
  53.         /// </summary>
  54.         /// <param name="stream">要计算哈希值的 Stream</param>
  55.         /// <param name="algName">算法:sha1,md5</param>
  56.         /// <returns>哈希值字节数组</returns>
  57.         private byte[] HashData(System.IO.Stream stream, string algName)
  58.         {
  59.             System.Security.Cryptography.HashAlgorithm algorithm;
  60.             if (algName == null)
  61.             {
  62.                 throw new ArgumentNullException("algName 不能为 null");
  63.             }
  64.             if (string.Compare(algName, "sha1", true) == 0)
  65.             {
  66.                 algorithm = System.Security.Cryptography.SHA1.Create();
  67.             }
  68.             else
  69.             {
  70.                 if (string.Compare(algName, "md5", true) != 0)
  71.                 {
  72.                     throw new Exception("algName 只能使用 sha1 或 md5");
  73.                 }
  74.                 algorithm = System.Security.Cryptography.MD5.Create();
  75.             }
  76.             return algorithm.ComputeHash(stream);
  77.         }

  78.         /// <summary>
  79.         /// 字节数组转换为16进制表示的字符串
  80.         /// </summary>
  81.         private string ByteArrayToHexString(byte[] buf)
  82.         {
  83.             return BitConverter.ToString(buf).Replace("-", "");
  84.         }
  85.     }
复制代码






上一篇:[CSS]去掉网页的横向滚动条,竖向滚动条
下一篇:mysql 5.1.73免安装版本x32和x64位下载
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2022-11-10 22:46:15 | 显示全部楼层
推荐使用如下代码,在读取只读文件的情况下不会报错。



码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2024-8-13 13:16:34 | 显示全部楼层
c# 字符串md5加密成16位和32位
https://www.itsvse.com/thread-3224-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2024-12-17 14:11:02 | 显示全部楼层
小渣渣 发表于 2022-11-10 22:46
推荐使用如下代码,在读取只读文件的情况下不会报错。

不推荐此方法,此方法性能较差,会把文件读取到内存中,推荐如下方法:


QQ截图20241217141003.jpg

测试代码:



码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2025-2-8 16:16:24 | 显示全部楼层
计算字符串的 sha1 签名




码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-7-18 10:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表