Chinaunix

标题: 115网盘怎么判断两个文件是同一文件的 [打印本页]

作者: wiresnake    时间: 2012-11-01 15:52
标题: 115网盘怎么判断两个文件是同一文件的
RT,我用Linux下的MD5和SHA1命令计算了文件的值,在报文里没有找到,纳闷。。。
作者: hellioncu    时间: 2012-11-01 16:07
你上传文件时抓包?你确信上传两个不同名但内容相同的文件,最终只存一份?
作者: liuiang    时间: 2012-11-01 16:13
一般来说,是的。应该是用了一些类似于md5的算法。具体神马算法,要看实现了。你可以看看他程序里面函数名字,看能不能猜到。

或者用了算法之后,还要跟文件长度等一些文件特征信息进行了计算,然后再发送也未可知啊。
作者: wiresnake    时间: 2012-11-01 16:15
hellioncu 发表于 2012-11-01 16:07
你上传文件时抓包?你确信上传两个不同名但内容相同的文件,最终只存一份?

100%确定,
作者: sorawa    时间: 2012-11-01 16:22
小弟也非常好奇。。类似于迅雷那样下载文件时候怎么确定文件是同样的
再从其他节点抽取资源   
作者: fender0107401    时间: 2012-11-01 16:26
应该是客户端计算MD5,然后对比MD5值。

作者: fengyun530    时间: 2012-11-01 16:35
本帖最后由 fengyun530 于 2012-11-01 16:37 编辑

      115网盘的网站应该是用了后台动态语言都有的一种判断文件MD5值的函数,比如PHP,file_md5(文件路径)获取文件的MD5值,MD5一样就说明是同一个文件,而且这种效率还是满高的,JSP,.net也有。115的应该就是用了这种判断机制。不过不排除它用了效率更高的方法函数。
作者: wiresnake    时间: 2012-11-01 16:37
fender0107401 发表于 2012-11-01 16:26
应该是客户端计算MD5,然后对比MD5值。

不清楚,感觉不是用的MD5值,我又测了一下360的云盘,跟115比它简直就是一弱智
作者: fengyun530    时间: 2012-11-01 16:38
wiresnake 发表于 2012-11-01 16:37
不清楚,感觉不是用的MD5值,我又测了一下360的云盘,跟115比它简直就是一弱智

那你试试百度的网盘。效果如何?
作者: hellioncu    时间: 2012-11-01 16:38
wiresnake 发表于 2012-11-01 16:15
100%确定,


我的猜测:
客户端上传两个不同名的相同文件,如果第二个速度很快,那么应该是客户端计算的了SHA1之类的,如果速度跟第一个一样,那应该是服务端判断是否相同。

不过我很好奇,LZ怎么能100%肯定这种情况下只保存一份。
作者: hanzhenlll    时间: 2012-11-01 16:41
每个文件做一个索引,可以用HASH表, 重复的文件用类似指针代替..  重复数据删除-文件模式
跟存储服务器相通,早期的存储服务器就是这么做的,不过现在技术升级了,不是文件级别的了,而是块Block 级别的...
作者: wiresnake    时间: 2012-11-01 16:46
hellioncu 发表于 2012-11-01 16:38
我的猜测:
客户端上传两个不同名的相同文件,如果第二个速度很快,那么应该是客户端计算的了SHA1之类 ...

我做DPI的,我把上传的流阻断了,如果一份文件之前已经上传过,然后把原来网盘的文件删除,它可以重新上传,即使改过名字,我觉得第二份文件不是从本地上传的,而是在115服务器那边保存进我网盘的
作者: sandljj    时间: 2012-11-01 17:23
呵呵。。。
这个东西其实没想象那么复杂吧
作者: hellioncu    时间: 2012-11-01 17:29
sandljj 发表于 2012-11-01 17:23
呵呵。。。
这个东西其实没想象那么复杂吧


好陌生,好诱惑
作者: mirnshi    时间: 2012-11-01 18:10
hellioncu 发表于 2012-11-01 16:38
我的猜测:
客户端上传两个不同名的相同文件,如果第二个速度很快,那么应该是客户端计算的了SHA1之类 ...


你觉得保存一个计数器/指向占用空间多,还是保存多个文件副本占用空间多(不考虑冗余安全)?
作者: linux_c_py_php    时间: 2012-11-01 19:57
客户端算个md5去服务器问问就行了, 你以为开发这些应用的程序员都是神仙吗...

你看不到说明报文加密了, 这种应用能偷用户电脑的资料就偷, 让你看到岂不是很丢脸.
作者: hellioncu    时间: 2012-11-01 20:22
mirnshi 发表于 2012-11-01 18:10
你觉得保存一个计数器/指向占用空间多,还是保存多个文件副本占用空间多(不考虑冗余安全)?


把别的115 ID分享的文件存到自己的网盘,当然是加一个引用而已。
但是针对个人上传的,在整个网盘中不一定能找到一样的,只用SHA1之类的值比较理论上存在误判。也许为了简单,实实在在存上一份也是有可能的。
作者: mirnshi    时间: 2012-11-03 09:54
hellioncu 发表于 2012-11-01 20:22
把别的115 ID分享的文件存到自己的网盘,当然是加一个引用而已。
但是针对个人上传的,在整个网盘中不 ...


如果是唯一的,自然要上传了。目前来看sha1还是能够确认唯一性的,否则好多软件/代码的唯一性就受质疑了。
作者: hellioncu    时间: 2012-11-03 10:07
mirnshi 发表于 2012-11-03 09:54
如果是唯一的,自然要上传了。目前来看sha1还是能够确认唯一性的,否则好多软件/代码的唯一性就受质疑了 ...


SHA1相同不能证明文件相同,否则SHA1跟文件是一一映射了,那所有文件都可以压缩成SHA1那么长,可能么?
作者: mirnshi    时间: 2012-11-03 10:55
hellioncu 发表于 2012-11-03 10:07
SHA1相同不能证明文件相同,否则SHA1跟文件是一一映射了,那所有文件都可以压缩成SHA1那么长,可能么?


目前还没与找到sha1的碰撞. 套用你这种说法,每个人的指纹是唯一的,那么所有人都可以压缩成一个指纹
作者: hellioncu    时间: 2012-11-03 12:34
mirnshi 发表于 2012-11-03 10:55
目前还没与找到sha1的碰撞. 套用你这种说法,每个人的指纹是唯一的,那么所有人都可以压缩成一个指纹


那是主动找不到碰撞,但碰撞是肯定存在的
作者: xdsnet    时间: 2012-11-06 11:33
sha1和md5结合起来,同时碰撞的可能要小很多了,再接合部分文件原有属性,比如长度/开始的一小段数据等,这些结合起来碰撞的可能还要小一些。
作者: sunbeat    时间: 2012-11-07 12:23
几个G的文件,不可能全文sha1来搞的,那样得把机器累死。
所以,肯定是部分数据,比如各个部分抽样出来sha1,再加上文件大小等属性,就可以确认文件的唯一了。
但他怎么做的抽样sha1实现,那就不好判断了
作者: 耗资喜欢猫    时间: 2012-11-08 00:22
一般是分片,然后多次md5或者是先md5后sha1,总之就是这两种的组合
作者: shang2010    时间: 2012-11-08 09:43
wiresnake 发表于 2012-11-01 16:37
不清楚,感觉不是用的MD5值,我又测了一下360的云盘,跟115比它简直就是一弱智


360这方面是注重隐私的,
每个人的云盘都是私有小后仓,服务器不打算对其中的内容做过多的逻辑处理;

当然这个不是官方说法{:3_192:} ;
作者: NalaGinrut    时间: 2012-11-08 11:03
为什么一定要限制在md5/sha1呢? 任何digest算法都可以用来做类似的hash吧,况且比md5速度快碰撞少的算法也很多,再加上额外信息(比如长度)一起做摘要的话,碰撞几率非常小了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2