Python哈希不匹配

2024-10-06 11:24:01 发布

您现在位置: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文件比较实用程序声明为相同的。你知道吗

所以,问题似乎出在上面发布的代码上。我做错什么了?你知道吗


Tags: 文件inforead头文件openmd5filehashlib
1条回答
网友
1楼 · 发布于 2024-10-06 11:24:01

你忘了要散列。你在比较两个md5哈希值,而不是哈希值。你知道吗

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

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

相关问题 更多 >