我发现了一个在线示例,它通过以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相同的校验和?