C#中文件的MD5哈希值

时间:2014-01-18 18:47:39

标签: c# md5

如何以下一种方式计算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 无法帮助完成此任务。

1 个答案:

答案 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