C# 计算文件的 Hash 值
- /// <summary>
- /// 提供用于计算指定文件哈希值的方法
- /// <example>例如计算文件的MD5值:
- /// <code>
- /// String hashMd5=HashHelper.ComputeMD5("MyFile.txt");
- /// </code>
- /// </example>
- /// <example>例如计算文件的CRC32值:
- /// <code>
- /// String hashCrc32 = HashHelper.ComputeCRC32("MyFile.txt");
- /// </code>
- /// </example>
- /// <example>例如计算文件的SHA1值:
- /// <code>
- /// String hashSha1 =HashHelper.ComputeSHA1("MyFile.txt");
- /// </code>
- /// </example>
- /// </summary>
- public sealed class HashHelper
- {
- /// <summary>
- /// 计算指定文件的MD5值
- /// </summary>
- /// <param name="fileName">指定文件的完全限定名称</param>
- /// <returns>返回值的字符串形式</returns>
- public static String ComputeMD5(String fileName)
- {
- String hashMD5 = String.Empty;
- //检查文件是否存在,如果文件存在则进行计算,否则返回空值
- if (System.IO.File.Exists(fileName))
- {
- using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
- {
- //计算文件的MD5值
- System.Security.Cryptography.MD5 calculator=System.Security.Cryptography.MD5.Create();
- Byte[] buffer = calculator.ComputeHash(fs);
- calculator.Clear();
- //将字节数组转换成十六进制的字符串形式
- StringBuilder stringBuilder = new StringBuilder();
- for (int i = ; i < buffer.Length; i++)
- {
- stringBuilder.Append(buffer[i].ToString("x2"));
- }
- hashMD5= stringBuilder.ToString();
- }//关闭文件流
- }//结束计算
- return hashMD5;
- }//ComputeMD5
- /// <summary>
- /// 计算指定文件的CRC32值
- /// </summary>
- /// <param name="fileName">指定文件的完全限定名称</param>
- /// <returns>返回值的字符串形式</returns>
- public static String ComputeCRC32(String fileName)
- {
- String hashCRC32 = String.Empty;
- //检查文件是否存在,如果文件存在则进行计算,否则返回空值
- if (System.IO.File.Exists(fileName))
- {
- using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
- {
- //计算文件的CSC32值
- Crc32 calculator = new Crc32();
- Byte[] buffer = calculator.ComputeHash(fs);
- calculator.Clear();
- //将字节数组转换成十六进制的字符串形式
- StringBuilder stringBuilder = new StringBuilder();
- for (int i = ; i < buffer.Length; i++)
- {
- stringBuilder.Append(buffer[i].ToString("x2"));
- }
- hashCRC32 = stringBuilder.ToString();
- }//关闭文件流
- }
- return hashCRC32;
- }//ComputeCRC32
- /// <summary>
- /// 计算指定文件的SHA1值
- /// </summary>
- /// <param name="fileName">指定文件的完全限定名称</param>
- /// <returns>返回值的字符串形式</returns>
- public static String ComputeSHA1(String fileName)
- {
- String hashSHA1 = String.Empty;
- //检查文件是否存在,如果文件存在则进行计算,否则返回空值
- if (System.IO.File.Exists(fileName))
- {
- using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
- {
- //计算文件的SHA1值
- System.Security.Cryptography.SHA1 calculator = System.Security.Cryptography.SHA1.Create();
- Byte[] buffer = calculator.ComputeHash(fs);
- calculator.Clear();
- //将字节数组转换成十六进制的字符串形式
- StringBuilder stringBuilder = new StringBuilder();
- for (int i = ; i < buffer.Length; i++)
- {
- stringBuilder.Append(buffer[i].ToString("x2"));
- }
- hashSHA1 = stringBuilder.ToString();
- }//关闭文件流
- }
- return hashSHA1;
- }//ComputeSHA1
- }//end class: HashHelper
- /// <summary>
- /// 提供 CRC32 算法的实现
- /// </summary>
- public class Crc32 : System.Security.Cryptography.HashAlgorithm
- {
- public const UInt32 DefaultPolynomial = 0xedb88320;
- public const UInt32 DefaultSeed = 0xffffffff;
- private UInt32 hash;
- private UInt32 seed;
- private UInt32[] table;
- private static UInt32[] defaultTable;
- public Crc32()
- {
- table = InitializeTable(DefaultPolynomial);
- seed = DefaultSeed;
- Initialize();
- }
- public Crc32(UInt32 polynomial, UInt32 seed)
- {
- table = InitializeTable(polynomial);
- this.seed = seed;
- Initialize();
- }
- public override void Initialize()
- {
- hash = seed;
- }
- protected override void HashCore(byte[] buffer, int start, int length)
- {
- hash = CalculateHash(table, hash, buffer, start, length);
- }
- protected override byte[] HashFinal()
- {
- byte[] hashBuffer = UInt32ToBigEndianBytes(~hash);
- this.HashValue = hashBuffer;
- return hashBuffer;
- }
- public static UInt32 Compute(byte[] buffer)
- {
- return ~CalculateHash(InitializeTable(DefaultPolynomial), DefaultSeed, buffer, , buffer.Length);
- }
- public static UInt32 Compute(UInt32 seed, byte[] buffer)
- {
- return ~CalculateHash(InitializeTable(DefaultPolynomial), seed, buffer, , buffer.Length);
- }
- public static UInt32 Compute(UInt32 polynomial, UInt32 seed, byte[] buffer)
- {
- return ~CalculateHash(InitializeTable(polynomial), seed, buffer, , buffer.Length);
- }
- private static UInt32[] InitializeTable(UInt32 polynomial)
- {
- if (polynomial == DefaultPolynomial && defaultTable != null)
- {
- return defaultTable;
- }
- UInt32[] createTable = new UInt32[];
- for (int i = ; i < ; i++)
- {
- UInt32 entry = (UInt32)i;
- for (int j = ; j < ; j++)
- {
- if ((entry & ) == )
- entry = (entry >> ) ^ polynomial;
- else
- entry = entry >> ;
- }
- createTable[i] = entry;
- }
- if (polynomial == DefaultPolynomial)
- {
- defaultTable = createTable;
- }
- return createTable;
- }
- private static UInt32 CalculateHash(UInt32[] table, UInt32 seed, byte[] buffer, int start, int size)
- {
- UInt32 crc = seed;
- for (int i = start; i < size; i++)
- {
- unchecked
- {
- crc = (crc >> ) ^ table[buffer[i] ^ crc & 0xff];
- }
- }
- return crc;
- }
- private byte[] UInt32ToBigEndianBytes(UInt32 x)
- {
- return new byte[] { (byte)((x >> ) & 0xff), (byte)((x >> ) & 0xff), (byte)((x >> ) & 0xff), (byte)(x & 0xff) };
- }
- }//end class: Crc32
C# 计算文件的 Hash 值的更多相关文章
- 【转】Java计算文件的hash值
原文地址:http://blog.csdn.net/qq_25646191/article/details/78863110 如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件has ...
- powershell中使用Get-FileHash计算文件的hash值
今天在公司一台windows服务器上.需要对两个文件进行比对,笔者首先就想到了可以使用md5校验 但是公司服务器上又不可以随意安装软件,于是笔者想到了可以试试windows自带的powershell中 ...
- C#计算文件的MD5值实例
C#计算文件的MD5值实例 MD5 是 Message Digest Algorithm 5(信息摘要算法)的缩写,MD5 一种散列(Hash)技术,广泛用于加密.解密.数据签名和数据完整性校验等方面 ...
- C# 计算文件的HASH
/// <summary> /// 提供用于计算指定文件哈希值的方法 /// <example>例如计算文件的MD5值: /// <code> /// String ...
- c#计算文件的MD5值
代码: /// <summary> /// 计算文件的 MD5 值 /// </summary> /// <param name="fileName" ...
- 计算文件的MD5值和sha256值
1.计算文件的MD5值. 1)linux系统计算 MD5值:md5sum+文件名 sha256值:sha256su+文件名 2)windows系统计算 MD5值:利用Notepad++工具计算 sha ...
- 在.NET中计算文件的MD5值
更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 直接上代码吧: using System; using System.IO; using System.Security. ...
- python计算文件的md5值
前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...
- 计算文件的MD5值(Java & Rust)
Java public class TestFileMD5 { public final static String[] hexDigits = { "0", "1&qu ...
随机推荐
- JAVA 反射应用:properties2Object
MixAll.java import java.lang.reflect.Method; import java.util.Properties; public class MixAll { /** ...
- [转]Oracle关于null的处理
转至:http://www.2cto.com/database/201209/157606.html 关于空值null的排序问题 Oracle排序中NULL值处理的五种常用方法: 1.缺省O ...
- freemarker截取字符串subString
转至:http://fengzhijie1103.iteye.com/blog/1142918 freemarker截取字符串其实和JAVA语法是差不多了,也有substring 方法 如 ...
- Bootstrap 列偏移\列嵌套\列排序
1.列偏移 这个其实很简单就是通过一个样式类,通过.col-md-offset-*可以将列偏移到右侧.这些class通过使用*选择器将所有列增加了列的左侧margin.例如,.col-md-offse ...
- pygame “音乐盒”---- 播放一首歌& 点击对话框后背景以及对话框大小改变
有时,你用pygame写的游戏也许需要播放一些背景音乐,该怎么做呢,直接上代码: 下面的代码,有关于: 1>设置对话框图标.大小.标题 2>播放音乐 3>设置背景图片,以及获取背景图 ...
- 创建虚拟交换机(New-VMSwitch)
#获取网卡列表Get-NetAdapter
- 【转】shell脚本处理字符串的常用方法
转自:http://blog.csdn.net/linfeng999/article/details/6661233 1. 构造字符串 直接构造 STR_ZERO=hello #shell中等号左右的 ...
- delphi 选中的展开0级 子级不展开
TreeView1.Selected.Expand(False); //选中的展开0级 子级不展开 TreeView1.Selected.Expand(True); //全部展开 来自为知笔记(Wiz ...
- UML视图(九)部署图
一.什么是部署图? 部署图对面向对象系统的物理方面建模,描写叙述系统执行时节点.构件实例及其对象的配置.主要用来在部署系统时涉及到的硬件(处理器和设备)进行建模. 二.部署图的组成元素? 部署图主要包 ...
- Windows下codeblocks的安装与配置
最近自己正好要使用codeblocks编写C++程序,安装好却发现无法编译,如果您也遇到相似问题,可以参考本文. 如果您已安装codeblocks,想转换成中文界面,直接参考Step 2. 如果您C程 ...