Python 哈希值不匹配

Python hashes don't match

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

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

因为它是一个头文件,几乎所有地方都#included,触摸它会导致完整构建。所以,如果没有变化,我不想生成文件。

最简单的方法似乎是在 /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 文件比较实用程序也将它们声明为相同。

所以,问题似乎出在上面的代码 posted 上。我做错了什么?

您实际上忘记了请求哈希值。您正在比较两个 md5-hasher-thingies,而不是哈希。

调用 digest 获取散列作为 bytes 对象,或 hexdigest 获取散列的十六进制编码的字符串:

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