
向大家请教一个问题,一个大文件分成多块上传,每个请求只带上其中一片数据,怎么算出整个文件的 md5 ? btw 用的是 php
1 araraloren 2017-01-16 12:37:23 +08:00 整个文件的 MD5 只能用整个文件的数据来算。。 |
2 yangff 2017-01-16 12:46:58 +08:00 比较简单的做法是自己实现一个 md5 算法,然后每个 block update 之后把 context 存下来…… |
3 abellee 2017-01-16 12:52:11 +08:00 via iPhone 你上传之前 拿全文件计算好 不就好了吗 |
4 ykjsw 2017-01-16 12:56:35 +08:00 |
5 raysonx 2017-01-16 13:02:17 +08:00 楼上已经说得很清楚了。 我再补充一点, MD5 现在很容易被碰撞,如果条件允许的话建议上 SHA256 |
8 Kilerd 2017-01-16 13:44:01 +08:00 所以说还是 SHA3 好, 随便 update 。输出 HASH 长度也是随便定的,方便多了。 |
10 stancaohua 2017-01-16 14:51:54 +08:00 @stiekel 不加盐的 MD5 确实很容易。 而且好像在哪里看到个说法是普通 MD5 应被视为已被破解的加密方式了。。。 |
11 otakustay 2017-01-16 15:11:49 +08:00 @raysonx md5 能碰撞但是要做出具备攻击能力的碰撞可是几乎不可能 md5 可以流式输入,你必须建个队列,从第 0 块开始到一块就计算一块,如果到的顺序是 1-4-0-2-3 的话,你得等到 0 到了以后一起算 01 ,再等 2 到了把 2 给 update 上去, 3 到了再把 34 给 update 上去 |
12 otakustay 2017-01-16 15:12:51 +08:00 另外一个办法是,如果你的切块的算法是一致的话,每块单独算,再把所有块的 md5 合起来再做一次 md5 其实也是可以保证效果的 |
13 cxbig 2017-01-16 15:13:31 +08:00 LZ 只是用 MD5 验证文件完整性吧?不涉及密码或加密数据,你们谈碰撞、破解的有意义么? 传输总有个拆分和合并的过程,做完了再验证不就好了? |
14 raysonx 2017-01-16 15:38:43 +08:00 |
15 raysonx 2017-01-16 15:43:20 +08:00 “年份用两位数表示就足够了” “ IP 地址用 32 位整数就足够了” “ 16K 内存可以满足所有人的需求” “又不涉及金钱,干嘛要上 HTTPS ?” |
16 otakustay 2017-01-16 15:44:04 +08:00 @raysonx 如果 SHA1 的话碰撞难度和 MD5 差不多,如果是 SHA256 的话性能是 MD5 的 1/3 左右, SHA512 和 SHA256 性能相当,看需要取舍吧 |
17 ctsed 2017-01-16 15:46:20 +08:00 via iPhone 俩不同文件同 md5 md5 彩虹表跑明文 碰撞是第一个意思 |
18 raysonx 2017-01-16 15:56:35 +08:00 via Android @otakustay 其实就服务端来看, OpenSSL 在近些年的硬件上跑 sha1 和 sha256 的性能都差不多了,取决于实现,不过楼主如果用前端 js 实现估计就没办法了。 |
19 mingyun 2017-01-16 23:09:07 +08:00 php md5_file |
20 former 2017-01-17 09:43:52 +08:00 前端可以计算出整个文件的 md5 值,然后分片发送给后端,全部传完,后端按照既定的切割算法把文件合并了,然后 md5_file(),比对一下前端计算的值就可以了吧。 btw 楼主分片上传有什么 demo 可以参考推荐吗 |
21 stiekel 2017-01-17 09:53:00 +08:00 @stancaohua [不加盐的 MD5 确实很容易] ,这个和碰撞没有关系, MD5 碰撞是指两个不同的字符串或文件算出来的 MD5 相同。 通过穷举或字典计算 MD5 值对比来获取原字符串,这个不是碰撞。 |
22 woostundy 2017-01-17 10:35:28 +08:00 @stancaohua 密码或字符串容易被碰撞,文件几乎不可能被碰撞 |
23 Vizogood 2017-01-17 13:10:11 +08:00 MD5 会被碰撞是指 不同文件(数据) →相同 MD5 目前还没有工具能够做到 不同文件(数据)→相同 MD5→指定功能和内容 彩虹表跑 MD5 密码和碰撞没啥关系,这个是可逆性,并且 MD5 本身不可逆,依靠强大的彩虹表可以对比出原数据. 离不能用的时候还远呢...... 足够了 |
24 stancaohua 2017-01-17 15:41:46 +08:00 @stiekel @woostundy 随手在网上搜了篇文章 http://bobao.360.cn/learning/detail/2577.html 这个问题重点不在于安全,校验文件的方法有很多,我只是指出 MD5 并不安全。当然如果题主确定价值足够低没有被搞的意义的话用什么方法都行。 |