V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nanoha
V2EX  ›  程序员

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

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

    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 经过你和楼上几位老哥解释明白了 是文件夹信息导致的 我当时只想到目录结构 没考虑到文件夹时间等等问题
    cnyang
        15
    cnyang  
       2019-12-16 15:39:37 +08:00
    看是不是系统问题,将硬盘挂载到另外一个系统试下,
    我曾经也遇到过,本来以为是硬盘或内存的问题,但弄了半天还是一样,仔细一想系统自带软校验怎么都不可能是硬件问题,然后换了个系统正常了(杀毒没找到,估计是系统内核文件缺失)
    crab
        16
    crab  
       2019-12-16 16:07:55 +08:00
    压缩的文件保存了 ntfs 时间戳信息
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1087 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:42 · PVG 06:42 · LAX 14:42 · JFK 17:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.