我想比较两个不同网络位置的两个文件。这些文件的大小可以是几GB,有时文件位置可以用慢速WAN分隔。
我知道如何在Python中生成SHA1哈希,但我听说过一种方法可以散列多个文件部分,而不是整个文件,然后比较部分的哈希值。例如,从每个文件的开头,“中间”和结尾开始64KB。这是一种合法的方法吗?怎么办呢?
答案 0 :(得分:2)
使用
仅下载部分文件req = urllib2.Request(url)
req.headers['Range'] = 'bytes=%s-%s' % (start, end)
f = urllib2.urlopen(req)
然后你可以散列你下载的部分:
s = f.read()
hashlib.sha1(s).hexdigest()
当然为了确保文件是等效的,你必须对文件的每个部分进行哈希处理。
答案 1 :(得分:0)
也许您正在考虑hash lists或hash trees,它可用于减少数据传输(例如在bittorrent中)?不幸的是,他们在几个方面与你记得的不同:
在您的情况下,您可以在本地计算每个数据集的哈希列表(即在本地计算机上运行哈希计算)。然后,通过比较哪些哈希值匹配,哪些哈希值匹配,只传递不同的部分(如果这是你需要做的)。