我有三个字段:字符串标题,字节[]正文和字节[]数据,我想从中计算单个散列作为检查,以确保它们没有被篡改或损坏.
在Python中,我可以连续使用md5.update()来执行此操作.但是我在C#中找不到类似的功能.要使用MD5.ComputeHash()我需要将所有的源都复制到一个单字节[],这是我想避免的一个步骤.
我如何将它一起散列成一个哈希,而不必将数据复制到临时缓冲区?
解决方法
几乎所有的哈希算法的设计方式都是可以连续地以多个块的形式提供数据.结果与整个数据一次散列的相同.
创建例如MD5CryptoServiceProvider和每个块的TransformBlock Method和最后一个块的TransformFinalBlock Method:
MD5 md5 = new MD5CryptoServiceProvider(); // For each block: md5.TransformBlock(block,block.Length,block,0); // For last block: md5.TransformFinalBlock(block,block.Length); // Get the hash code byte[] hash = md5.Hash;