V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
xing393939
V2EX  ›  PHP

1000 个 4M 文件,如何计算合并之后的文件 MD5 值效率高?

  •  
  •   xing393939 · Dec 8, 2015 · 4722 views
    This topic created in 3800 days ago, the information mentioned may be changed or developed.
    如果先合并再计算,耗时很长。。。不知道能不能不合并就计算出来呢






    .
    14 replies    2015-12-08 20:44:33 +08:00
    ntdll
        1
    ntdll  
       Dec 8, 2015   ❤️ 1
    建议你看一下 MD5 的算法,他是分组进行计算的,因此计算过程中不要求你文件的连续性,即使你是连续的文件,在计算散列值的时候,依旧要拆分成一个个块,分别计算。
    loqixh
        2
    loqixh  
       Dec 8, 2015   ❤️ 1
    当然可以,用 MD5_Update
    allan888
        3
    allan888  
       Dec 8, 2015   ❤️ 1
    你把 4 个文件当成一个连续的文件看就得了。
    “ MD5 中的任意第 i 个分组,每次运算都由前一轮的 128 位结果值和第 i 块 512bit 值进行运算”
    你要做的就是每次输入下一部分数据的时候如果第一个文件结束了就用下一个续上而已。。。
    loqixh
        4
    loqixh  
       Dec 8, 2015   ❤️ 1
    查了下, php 是这样, 5.5 以上 crypto.createHash('md5').update("123456")
    h4x3rotab
        5
    h4x3rotab  
       Dec 8, 2015 via iPhone
    cat *.txt | md5 > output.txt
    h4x3rotab
        6
    h4x3rotab  
       Dec 8, 2015 via iPhone
    我错了,没看是 php 版。那就是 update 了。
    xing393939
        7
    xing393939  
    OP
       Dec 8, 2015
    感谢,已找到方法
    xing393939
        8
    xing393939  
    OP
       Dec 8, 2015   ❤️ 1
    $ctx = hash_init('md5');
    foreach ($array as $fileArr) {
    hash_update_file($ctx, "{$dir}/{$fileArr[0]}");
    }
    return hash_final($ctx);
    likebeta
        9
    likebeta  
       Dec 8, 2015
    貌似不行吧, 和文件时间也有关系吧, 合并后时间变化了
    lhbc
        10
    lhbc  
       Dec 8, 2015 via Android
    @likebeta 时间是文件系统的,和文件内容无关。
    Citrus
        11
    Citrus  
       Dec 8, 2015 via iPhone
    @likebeta md5 只关注内容,除了内容以外的所有东西随便改不会变化。
    likebeta
        12
    likebeta  
       Dec 8, 2015
    @lhbc
    @Citrus

    记错了, 当时是给文件夹压缩, 然后求 md5, 这样和文件夹中的文件时间有关系
    50vip
        13
    50vip  
       Dec 8, 2015
    可以的, update 就可以了, http://www.atool.org/file_hash.php 这个使用 js worker 做的,也是每次都一部分进行计算,以节约内存。
    wizardoz
        14
    wizardoz  
       Dec 8, 2015
    如果文件只是简单的连接,那么不合并计算和合并计算是一样的。
    md5 算法是支持流输入的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   768 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 22:03 · PVG 06:03 · LAX 15:03 · JFK 18:03
    ♥ Do have faith in what you're doing.