【问题标题】:MD5 of exe/dlls are different after rebuild重建后 exe/dll 的 MD5 不同
【发布时间】:2023-12-13 13:52:01
【问题描述】:

我想知道是否可以在新构建后使 dll/exe 的 MD5 保持一致?

每次我重建项目并使用“Microsoft File Checksum Integrity Verifier”工具获得不同的 MD5。

我发现了一些articals 关于这个问题,有人说这是由于 PE32 文件头部的时间戳。我对此一无所知。请问有人可以帮忙吗?提前谢谢!

以下是我如何获得 MD5 总和。 MD5Compare.exe 完全相同,只是它们不是在同一版本中创建的。

C:\Users\Administrator>fciv.exe D:\Lab\MD5Compare\MD5Compare\bin\Debug\2 -wp MD5
Compare.exe
//
// File Checksum Integrity Verifier version 2.05.
//
5cdca6373aca0e588e1e3df92a1d5d0a MD5Compare.exe

C:\Users\Administrator>fciv.exe D:\Lab\MD5Compare\MD5Compare\bin\Debug\2 -wp MD5
Compare.exe
//
// File Checksum Integrity Verifier version 2.05.
//
cf5caace5481edc79fd7bf3e99b48a5b MD5Compare.exe

【问题讨论】:

    标签: c# dll md5


    【解决方案1】:

    不,校验和必须不同,因为文件中的数据实际上已经改变,即使没有代码 - 编译没有功能差异,没有新功能添加到程序集中 - 因为构建的时间戳,一方面,会有所不同。

    因此,您需要在此处考虑元数据,以及它如何存储/影响文件系统上文件的属性,因此需要进行完整性检查。

    【讨论】:

    • 不重新编译未更改的文件(只是将它们复制到构建目录中)不应该导致哈希改变,不是吗?
    • 感谢格兰特。如果我需要将本地 dll 与服务器上的 dll 进行比较以确定它们是否需要更新,我该怎么办?我只需要一种方法来检查它们自上次构建以来是否没有更改。
    【解决方案2】:

    请考虑 MD5 应该做什么:它应该确保没有人在二进制级别上更改过您的文件。它应该确保您的文件完全相同。拥有多个构建(不同的文件)具有相同的 MD5 校验和会破坏拥有 MD5 的目的。

    如果您可以在校验和保持不变的情况下更改文件,那么黑客也可以。

    【讨论】: