如何使用Python的hashlib为匹配7zip校验和的目录生成校验和?

时间:2016-07-05 13:03:36

标签: python python-3.x hash 7zip hashlib

我发现了一个在线示例,它通过以os.path.walk()列出它们的任何顺序散列每个单独文件的哈希值来生成校验和(这是一致的,这样很好)。我在这里复制了这个例子:

def GetHashofDirs(directory, verbose=0):
  import hashlib, os
  SHAhash = hashlib.sha1()
  if not os.path.exists (directory):
    return -1

  try:
    for root, dirs, files in os.walk(directory):
      for names in files:
        if verbose == 1:
          print 'Hashing', names
        filepath = os.path.join(root,names)
        try:
          f1 = open(filepath, 'rb')
        except:
          # You can't open the file for some reason
          f1.close()
          continue

        while 1:
          # Read file in as little chunks
          buf = f1.read(4096)
          if not buf : break
          SHAhash.update(hashlib.sha1(buf).hexdigest())
        f1.close()

  except:
    import traceback
    # Print the stack traceback
    traceback.print_exc()
    return -2

  return SHAhash.hexdigest()

print GetHashofDirs('My Documents', 1)

这是有效的,但它没有提供与7zip的校验和计算器相同的结果,这正是我想要的。我意识到这可能是由于文件被散列的顺序不同,算法中的其他几个微小差异。我怎样才能更改此算法,以便生成与7zip相同的校验和?

0 个答案:

没有答案