使用C#将多个byte []一起散列为一个哈希?

Sco*_*ord 11 c# hash

我有三个字段:string Title,byte[] Bodybyte[] Data,我想从中计算一个哈希作为检查,以确保它们没有被篡改或损坏.

在Python中,我可以md5.update()连续几次使用它来执行此操作.但我在C#中找不到类似的功能.要使用MD5.ComputeHash(),我需要将所有源代码复制到单个字节[]中,这是我想避免的一个步骤.

如何将它们一起散列为一个哈希,而不必将数据复制到临时缓冲区?

dtb*_*dtb 16

几乎所有哈希算法的设计方式都可以连续地为多个块中的数据提供数据.结果就像整个数据一次被散列一样.

例如,创建一个实例MD5CryptoServiceProvider并调用TransformBlock方法对每个块和TransformFinalBlock法的最后一块:

MD5 md5 = new MD5CryptoServiceProvider();

// For each block:
md5.TransformBlock(block, 0, block.Length, block, 0);

// For last block:
md5.TransformFinalBlock(block, 0, block.Length);

// Get the hash code
byte[] hash = md5.Hash;
Run Code Online (Sandbox Code Playgroud)

  • 你能提供一个代码示例吗?我看到了这个方法,但我不知道它的用途。例如,如何避免它覆盖以前的输出? (2认同)

j12*_*567 5

使用IncrementalHash在.Net Standard和.Net Core中也有解决方案

IncrementalHash md5 = IncrementalHash.Create(HashAlgorithmName.MD5)

// For each block:
md5.AppendData(block);

// Get the hash code
byte[] hash = md5.GetHashAndReset();
Run Code Online (Sandbox Code Playgroud)