完全相同的文件多次编译后的md5都不一样

C#和D不知道其他人有没有这样的情况如果也是这样,为什么编译后的md5码会不同呢?既然是同一个文件,用同一编译器编译出来的,理论上编译出来的可执行程序是一致的才对,如果不... C#和D
不知道其他人有没有这样的情况

如果也是这样,为什么编译后的md5码会不同呢?
既然是同一个文件,用同一编译器编译出来的,理论上编译出来的可执行程序是一致的才对,如果不一致那是什么部分不一样呢?
展开
 我来答
天下有敌的店铺
推荐于2016-04-14 · TA获得超过504个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:283万
展开全部
建议你学习一下PE文件(通常的exe可执行文件就是一种PE文件)结构 其中由一个时间日期段 记录了PE文件被创建的时间 每一次编译的时间不同 因此此段的内容也不同 因此最终生成的文件内容有差异 继而md5码有异 附: PE部分结构C语言描述: typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDateStamp;//这里就是时间日期戳了 是链接器产生的时间 DWORD PointerToSymbolTable; DWORD NumberOfSymbols; WORD SizeOfOptionalHeader; WORD Characteristics; } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; 下图在一个具体的可知性文件中标示了此段的位置:



kaladijia
2008-09-03 · TA获得超过4326个赞
知道小有建树答主
回答量:1737
采纳率:25%
帮助的人:508万
展开全部
你这是两个问题。

一、同一数据产生的MD5值是一样的。
二、同一个编译器对同一程序文件可能会产生出不同的文件。
第一个问题就不解释了,你找一些和MD5有关资料就行了。它是一种单向希哈函数。类似于y=f(x)形式。

编译器对程序文件解释时,会涉及内存分配,寄存器分配、堆栈分配、代码优化等各种各样的操作,而这些操作并不能保证每次产生相同的结果。所以最终在程序(EXE)中使用的代码就不同。

说明:这些说的结果不同是在保证原来程序含义的情况下。比如,1+1=2,而0+2=2。虽然都等于2但是可以有很多种解释。

所以最终的程序文件就相同了,所以MD5也不同了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旋天渣观9129
2008-09-03 · TA获得超过1487个赞
知道大有可为答主
回答量:1443
采纳率:0%
帮助的人:1608万
展开全部
呵呵 你的两次文件的日期肯定不一样吧,日期信息不是操作系统保存的,而是在二进制文件本身内容的固定位置里包含的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bc0db648f
2008-09-02 · TA获得超过301个赞
知道答主
回答量:97
采纳率:0%
帮助的人:0
展开全部
呵呵!当然了MD5是随即不可逆算法每次生成都取的不同的随机基数码!很正常的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Michael_0
2008-09-02 · TA获得超过1265个赞
知道小有建树答主
回答量:1080
采纳率:100%
帮助的人:832万
展开全部
按理说,一个文件对应一个唯一的Md5值,编译后文件发生轻微变化也就造成Md5值变化,有Md5碰撞的可能,但几率很小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式