关于 c#:MD5 的 exe/dll 重建后不同

MD5 of exe/dlls are different after rebuild

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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

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

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


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

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