MD5、SHA256等Hash算法的实时计算

2025-09-25 21:20:41

最近,在项目中,需要计算文件的hash值来对文件进行最终校验,在C#中,MD5、SHA256都是直接可用的。下面以MD5为例,

一般来说,计算文件hash值时,是加载一个文件,然后来读取并计算,如下:

MD5 md = MD5.Create();

buffer = Encoding.ASCII.GetBytes("abc");//这里abc表示从文件中读取的内容

md.TransformBlock(buffer, 0, buffer.Length, buffer, 0);

md.TransformFinalBlock(buffer, 0, 0);

Console.WriteLine(System.Convert.ToBase64String(md.Hash));

以上结算结果

kAFQmDzST7DWlj99KOF/cg==

对于这种方式,小文件来说还好,但是,当文件大小达到10GB左右时,计算耗时大概2Min左右,文件更大,则效果更差。因此,我们需要一种能够实时计算的方式。

实时计算hash值,

我们期望,在记录文件的过程中,直接计算hash值,等文件记录完毕时,直接生成相应的文件hash值。

talk is cheap,show you code.

var buffer = new byte[0];

MD5 md5 = MD5.Create();

buffer = Encoding.ASCII.GetBytes("a");

md5.TransformBlock(buffer, 0, buffer.Length, buffer, 0);

buffer = Encoding.ASCII.GetBytes("b");

md5.TransformBlock(buffer, 0, buffer.Length, buffer, 0);

buffer = Encoding.ASCII.GetBytes("c");

md5.TransformBlock(buffer, 0, buffer.Length, buffer, 0);

md5.TransformFinalBlock(buffer, 0, 0);

Console.WriteLine(System.Convert.ToBase64String(md5.Hash));

kAFQmDzST7DWlj99KOF/cg==

至此,两种方式结果相同,可知,可通过第二种方法来实时运用MD5等来计算hash值。