Python 哈希不匹配



我正在使用Python生成一个C++头文件。这是安全机密,所以我不能在这里张贴。

我根据某些输入生成它,如果这些输入没有改变,那么应该生成相同的文件。

因为它是一个几乎到处都包含#的头文件,所以触摸它会导致完整的构建。因此,如果没有更改,我不想生成该文件。

最简单的方法似乎是在/tmp中生成文件,然后对现有文件进行MD5哈希,看看是否需要更新。

existingFileMd5 = hashlib.md5(open(headerFilePath,  'rb').read())
newFileMd5 = hashlib.md5(open(tempFilePath,  'rb').read())
if newFileMd5 == existingFileMd5:
print('Info:    file "' + headerFilePath + '" unchanged, so not updated')
os.remove(tempFilePath)
else:
shutil.move(tempFilePath, headerFilePath)
print('Info:    file "' + headerFilePath + '" updated')

然而,当我连续快速运行两次脚本(不更改输入(时,似乎总是认为MD5哈希不同,并更新文件,从而减少了构建时间。

除了由输入控制的部分之外,文件中没有其他可变部分。例如,我不是在写时间戳。

我让同事们仔细查看了这两个文件,并宣布它们是相同的(它们很小(。Linux的meld文件比较实用程序也声明它们是相同的。

因此,问题似乎出在上面发布的代码上。我做错了什么?

您实际上忘记了请求散列。你在比较两个md5散列,而不是散列。

调用digest以获得作为bytes对象的哈希,或者调用hexdigest以获得具有哈希十六进制编码的字符串:

if newFileMd5.digest() == existingFileMd5.digest():
...

最新更新