向大家请教一个问题,一个大文件分成多块上传,每个请求只带上其中一片数据,怎么算出整个文件的 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 1
|
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 1
俩不同文件同 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 并不安全。当然如果题主确定价值足够低没有被搞的意义的话用什么方法都行。 |