我有三个字段:string Title,byte[] Body和byte[] 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)
使用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)