我在网络周围移动了很多大型视频文件,我采用了一种在复制后比较文件的方法,以确保它们是相同的。即使在网络上,该方法也非常快。麻烦的是,我不确定它是否足够。本质上,我从每个文件的开始/中间/结尾散列一个小块,连接哈希并比较它们。我希望得到一些关于这种方法有效性的反馈或建议。例如,如果两个文件中的一个包含编辑,该文件大小相同,并且也超出了三个哈希点的范围。在这种情况下,该方法可以解决文件的相等性吗?
这就是我所做的(在Python中):
def get_hash(filename):
try:
f = open(filename, 'rb')
except:
raise
hash_string = ''
chunk_size = 1024
size = os.stat(filename).st_size
if size >= (chunk_size * 3):
hash_string += sha256(f.read(chunk_size)).hexdigest()
f.seek(size / 2)
hash_string += sha256(f.read(chunk_size)).hexdigest()
f.seek(size - chunk_size)
hash_string += sha256(f.read(chunk_size)).hexdigest()
else:
get_full_hash(filename)
f.close()
return unicode(hash_string)
答案 0 :(得分:0)
在这种情况下,该方法是否可以解决文件的相等问题?
是的,当然可以。
即使是整个文件的哈希也可能“撒谎” - 尽管使用像sha256这样的东西,碰撞的可能性会非常低。唯一可以确定的方法是比较两个文件的全部内容。
整个文件的散列速度有多慢?
你的方法“足够好”吗?有可能。如果您正在寻找重复的视频文件,这可能是一个不错的选择。如果您担心在大型副本中损坏的几个字节,这可能不是一个很好的选择。
最终,这是你愿意冒多大风险的问题。