如何以下一种方式计算C#中文件的MD5哈希值:
Compute hash for range 1-4096 bytes -> get MD5 hash for this range;
1-8192 -> get MD5 hash for this range;
1-12288 -> get MD5 hash for this range;
1-16384 -> get MD5 hash for this range;
...
1-end of file -> get MD5 hash for file.
所以我总是使用大小为4096字节的缓冲区读取文件,并希望更新文件的所有读取部分的哈希值。怎么实现呢?看起来 MD5CryptoServiceProvider 无法帮助完成此任务。
答案 0 :(得分:1)
通常情况下,MD5和其他哈希值不会那样。他们在最后一个块中使用了某个填充。因此,如果计算某些字节的最终哈希值,则以后不能向其添加更多字节。一旦你添加了最后一个块并计算了哈希值,那么游戏就结束了,你必须重新开始。
我知道你想计算哈希值,但还要继续前进。
最好的策略是使用自定义MD5实现,让您克隆其状态。添加一个块时,复制MD5算法的状态,因此必须具有相同状态的MD5哈希。您使用其中一个克隆来完成转换。你用另一个进一步。伪代码:
hasher = new md5
loop
read a block of the file
hasher.addblock(current block)
hasher2 = hasher.clone()
hasher.finish()
hasher = hasher2
end loop