原文地址: http://www.cnblogs.com/neoragex2002/archive/2006/04/26/385077.html
如果需要校验并修改两个远程主机上某个大文件,我们有几种方法:
直接传输?不过文件传输可能出错,而且文件太大费事费力。
将文件分成N个块,对每个块求Hash值,然后匹配,最后只传输Hash值错误的块。
第二种情况下,块分的太小,那么Hash值就需要很多;如果块太大,错了一个就需要传输的太多。
所以将这2者结合起来,构成了Merkle Hashing Tree。
我们将文件分成2的指数个块N个(1,2,4,8,16,32....),然后每个块计算出SHA1值;
然后每2个块的SHA1值在求一次Hash,得到一个新的SHA1值,这样获得上一层的N/2个节点的值;
再对这N/2个节点做类似的操作,最后得到一个Root的节点的SHA1值。
我们验证的时候,就可以从最高级逐层的向下推进来发现错误的块。
Merkle Hashing Tree 也是BitTorrent中使用的方法。