为什么同一个文件在不同文件夹下压缩后 md5 不一致? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
nanoha
V2EX    程序员

为什么同一个文件在不同文件夹下压缩后 md5 不一致?

  •  
  •   nanoha 2019-12-16 14:53:20 +08:00 5254 次点击
    这是一个创建于 2176 天前的主题,其中的信息可能已经有所发展或是发生改变。

    win10 环境

    想下个游戏补丁但是没法官方下 只能在其他源找了两个 然后比较一下 md5 校验下 由于 md5 不一致所以自己拆看压缩包一点一点对比 最后发现了以下情况

    同一个文件 复制一下放在不同位置的文件夹下 比如文件叫 aaa.exe 然后复制后分别放在放在 C:/outer/inner 和 D:/outer/inner

    1.直接对两个文件做 md5 计算 结果一样 2.将两个不同位置的 inner 文件夹进行压缩(用的 windows 自带的发送到 zip 压缩)后对压缩后的 inner.zip 进行 md5 计算 结果一样 3.将两个不同位置的 outer 文件夹进行压缩 压缩后的 outer.zip 计算 md5 结果不一样

    1 和 2 很好理解 但是 3 是为啥 超出了我的理解

    已经勾选了 windows 显示隐藏文件那个 没有任何隐藏文件

    16 条回复    2019-12-16 16:07:55 +08:00
    1OF7G
        1
    1OF7G  
       2019-12-16 15:03:01 +08:00
    压缩包可能有一些其它冗余信息,比如文件属性或者压缩包的 meta 之类的。
    你要对比两个文件夹相同,那应该递归对比里边的所有文件,而不是把文件夹压缩后对比。
    nanoha
        2
    nanoha  
    OP
       2019-12-16 15:07:46 +08:00
    @1OF7G 我后来确实用 powershell 的命令对比了一下里面的所有文件 md5 一致 但是我挺好奇为啥上面提到的 3 那种情况会发生 如果是压缩会产生一些额外信息的话 为什么情况 2 中的那样单层文件夹压缩的 md5 却是一致的
    shijianit
        3
    shijianit  
       2019-12-16 15:11:56 +08:00
    按道理,同一个文件,压缩 2 次,2 个 zip 的 md5 应该也不一样的吧
    Rekkles
        4
    Rekkles  
       2019-12-16 15:12:04 +08:00
    Mac 系统下面会在文件夹属性里面存在一个 Access Time,每次访问都会 update 会导致属性变化 如果使用 zip 命令加上参数 -X 或者 --no-extra,Win 下面应该也会有类似的属性,建议 google 一下
    1OF7G
        5
    1OF7G  
       2019-12-16 15:13:29 +08:00
    @nanoha 这个为什么,依赖于压缩软件的实现方式,只有看文档或源码才能解释。有可能的一点是,inner 文件夹的创建 /修改 /访问 等等属性相同,而 outer 的不相同。
    nanoha
        6
    nanoha  
    OP
       2019-12-16 15:15:50 +08:00
    @shijianit 实际上在 windows 下 上面提到的情况 2 两个的 md5 是一样的。。。
    nanoha
        7
    nanoha  
    OP
       2019-12-16 15:17:18 +08:00
    @1OF7G 你这么一说我好像有点头绪了 我记得 win7 之后好多文件夹是自带一些属性的(例如多媒体之类的)可能是这个 outer 放在不同位置导致创建时默认的类型不一致(大概。。。
    jasonyang9
        8
    jasonyang9  
       2019-12-16 15:18:16 +08:00
    难不成是吧目录信息带进去了?
    nanoha
        9
    nanoha  
    OP
       2019-12-16 15:22:33 +08:00
    @jasonyang9 我用的都是 windows 自带的那个右键菜单里面的“发送到-zip 压缩” 按理来说 压缩时使用的参数是一样的 就算真是目录信息不一致 感觉也不能解释情况 2
    wangyzj
        10
    wangyzj  
       2019-12-16 15:22:35 +08:00   1
    压缩不仅仅是计算了文件内容把
    应该还有创建时间和修改时间吧
    毕竟压缩包里面要显示这些信息的
    nanoha
        11
    nanoha  
    OP
       2019-12-16 15:26:57 +08:00
    @wangyzj 有道理 我记不清当时那个 outer 和 inner 文件夹是创建的还是拖过去的了 可能是 inner 我是拖过去的但是 outer 是新创建的
    Vegetable
        12
    Vegetable  
       2019-12-16 15:33:07 +08:00
    当然不一样,因为压缩包最起码最起码保存了文件夹创建时间.
    Vegetable
        13
    Vegetable  
       2019-12-16 15:33:47 +08:00   1
    ~/zip 15:32:13
    $ unzip -l 2/2.zip
    Archive: 2/2.zip
    Length Date Time Name
    --------- ---------- ----- ----
    0 2019-12-16 15:26 a/
    0 2019-12-16 15:26 a/1.txt
    --------- -------
    0 2 files

    ~/zip 15:32:15
    $ unzip -l 1/1.zip
    Archive: 1/1.zip
    Length Date Time Name
    --------- --------- ----- ----
    0 2019-12-16 15:25 a/
    0 2019-12-16 15:25 a/1.txt
    --------- -------
    0 2 files
    nanoha
        14
    nanoha  
    OP
       2019-12-16 15:37:08 +08:00
    @Vegetable 经过你和楼上几位老哥解释明白了 是文件夹信息导致的 我当时只想到目录结构 没考虑到文件夹时间等等问题
    bigtwo
        15
    bigtwo  
       2019-12-16 15:39:37 +08:00
    看是不是系统问题,将硬盘挂载到另外一个系统试下,
    我曾经也遇到过,本来以为是硬盘或内存的问题,但弄了半天还是一样,仔细一想系统自带软校验怎么都不可能是硬件问题,然后换了个系统正常了(杀毒没找到,估计是系统内核文件缺失)
    crab
        16
    crab  
       2019-12-16 16:07:55 +08:00
    压缩的文件保存了 ntfs 时间戳信息
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     885 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:02 PVG 07:02 LAX 15:02 JFK 18:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86