架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 29290|回复: 2

[资料] c# 计算文件的SHA256值

[复制链接]
发表于 2016-10-14 10:16:41 | 显示全部楼层 |阅读模式
QQ截图20161014101525.jpg

  1. static void Main(string[] args)
  2.         {
  3.             Console.WriteLine(SHA256File(@"C:\BaiduYunDownload\66666.jpg"));
  4.         }


  5.         /// 计算文件的 SHA256 值
  6.         /// </summary>
  7.         /// <param name="fileName">要计算 SHA256 值的文件名和路径</param>
  8.         /// <returns>SHA256值16进制字符串</returns>
  9.         public static string SHA256File(string fileName)
  10.         {
  11.             return HashFile(fileName, "sha256");
  12.         }

  13.         /// <summary>
  14.         /// 计算文件的哈希值
  15.         /// </summary>
  16.         /// <param name="fileName">要计算哈希值的文件名和路径</param>
  17.         /// <param name="algName">算法:sha1,md5</param>
  18.         /// <returns>哈希值16进制字符串</returns>
  19.         public static string HashFile(string fileName, string algName)
  20.         {
  21.             if (!System.IO.File.Exists(fileName))
  22.                 return string.Empty;

  23.             FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
  24.             byte[] hashBytes = HashData(fs, algName);
  25.             fs.Close();
  26.             return ByteArrayToHexString(hashBytes);
  27.         }


  28.         /// <summary>
  29.         /// 字节数组转换为16进制表示的字符串
  30.         /// </summary>
  31.         public static string ByteArrayToHexString(byte[] buf)
  32.         {
  33.             string returnStr = "";
  34.             if (buf != null)
  35.             {
  36.                 for (int i = 0; i < buf.Length; i++)
  37.                 {
  38.                     returnStr += buf[i].ToString("X2");
  39.                 }
  40.             }
  41.             return returnStr;
  42.         }


  43.         /// <summary>
  44.         /// 计算哈希值
  45.         /// </summary>
  46.         /// <param name="stream">要计算哈希值的 Stream</param>
  47.         /// <param name="algName">算法:sha1,md5</param>
  48.         /// <returns>哈希值字节数组</returns>
  49.         public static byte[] HashData(Stream stream, string algName)
  50.         {
  51.             HashAlgorithm algorithm;
  52.             if (algName == null)
  53.             {
  54.                 throw new ArgumentNullException("algName 不能为 null");
  55.             }
  56.             if (string.Compare(algName, "sha256", true) == 0)
  57.             {
  58.                 algorithm = SHA256.Create();
  59.             }
  60.             else
  61.             {
  62.                 if (string.Compare(algName, "md5", true) != 0)
  63.                 {
  64.                     throw new Exception("algName 只能使用 sha256 或 md5");
  65.                 }
  66.                 algorithm = MD5.Create();
  67.             }
  68.             return algorithm.ComputeHash(stream);
  69.         }
复制代码






上一篇:http响应头Content-disposition
下一篇:asp.net mvc 使用ninject实现ioc依赖注入
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2016-10-14 10:19:34 | 显示全部楼层
简化了一下:
  1. static void Main(string[] args)
  2.         {
  3.             Console.WriteLine(SHA256File(@"C:\BaiduYunDownload\66666.jpg"));
  4.         }


  5.         /// 计算文件的 SHA256 值
  6.         /// </summary>
  7.         /// <param name="fileName">要计算 SHA256 值的文件名和路径</param>
  8.         /// <returns>SHA256值16进制字符串</returns>
  9.         public static string SHA256File(string fileName)
  10.         {
  11.             return HashFile(fileName);
  12.         }

  13.         /// <summary>
  14.         /// 计算文件的哈希值
  15.         /// </summary>
  16.         /// <param name="fileName">要计算哈希值的文件名和路径</param>
  17.         /// <param name="algName">算法:sha1,md5</param>
  18.         /// <returns>哈希值16进制字符串</returns>
  19.         public static string HashFile(string fileName)
  20.         {
  21.             if (!System.IO.File.Exists(fileName))
  22.                 return string.Empty;

  23.             FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
  24.             byte[] hashBytes = HashData(fs);
  25.             fs.Close();
  26.             return ByteArrayToHexString(hashBytes);
  27.         }


  28.         /// <summary>
  29.         /// 字节数组转换为16进制表示的字符串
  30.         /// </summary>
  31.         private static string ByteArrayToHexString(byte[] buf)
  32.         {
  33.             string returnStr = string.Empty;
  34.             if (buf != null)
  35.             {
  36.                 for (int i = 0; i < buf.Length; i++)
  37.                 {
  38.                     returnStr += buf[i].ToString("X2");
  39.                 }
  40.             }
  41.             return returnStr;
  42.         }


  43.         /// <summary>
  44.         /// 计算哈希值
  45.         /// </summary>
  46.         /// <param name="stream">要计算哈希值的 Stream</param>
  47.         /// <param name="algName">算法:sha1,md5</param>
  48.         /// <returns>哈希值字节数组</returns>
  49.         private static byte[] HashData(Stream stream)
  50.         {
  51.             HashAlgorithm algorithm = SHA256.Create();
  52.             return algorithm.ComputeHash(stream);     
  53.         }
复制代码

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2022-12-11 14:06:39 | 显示全部楼层
C# 获取文件MD5、SHA1的值
https://www.itsvse.com/thread-2962-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

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

Mail To:help@itsvse.com

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

GMT+8, 2026-10-16 19:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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