QQ中转站的极速之谜
腾讯在设计QQ中转站时,为了节约硬盘空间和上传带宽,如果在上传时,发现有 MD5码相同的文件,会自动引用,就是所谓的快速上传。
最近,不少朋友在BBS上说到存放到QQ中转站的文件损坏的问题,我当时认为是他们直接用IE或迅雷下载,网络不好造成数据丢包所致。根据腾讯的介绍,用他们开发的超级旋风下载是很可靠的。
在腾讯QQ中转站的文件保存策略里面,每隔7天需要续期,这是针对免费用户的。
我上个月在淘宝买了份GPS地图数据升级包,安装后上传到了QQ空间,每到第 5天,QQ会提示还有2天了,需要手动续期。因为朋友买了同一款GPS,我今晚准备给他安装时才发现,下载的数据出现了CRC错误,有一个关键的文件解不出来。
因为我是迅雷下载的,我还是怀疑是下载工具的问题,用超级旋风又下载了一次,这次仍然是同样的文件出错。这个文件包我前段时间曾经下载过,一切正常的,所以可以判断是在腾讯的中转站服务器上文件被损坏。幸好,我GPS卡上还有数据,只有翻箱倒框找出读卡器拷贝了一份。
虽然,腾讯QQ中转站是免费服务,我们也不能要求腾讯为此负责。因为中转站文件损坏事件屡次发生,所以提醒大家重要的数据还是以本地硬盘、U盘或光盘保存为最佳选择,网盘(不止QQ中转站,还有 raysouce,namipan,CTdisk等)只能作为暂存数据用用。
也许,腾讯以后推出的收费服务会很好,就象现在腾讯其它的增值服务一样。
我发现还有另外一种错误,以压缩文件为例,就是出现“不可预见的档案文件末端”,这和压缩包内文件CRC error不同,压缩文件完全被破坏掉了。
腾讯在设计QQ中转站时,为了节约硬盘空间和上传带宽,如果在上传时,发现有 MD5码相同的文件,会自动引用,就是所谓的快速上传。
问题来了,这也是我要说的Bug,在服务器上文件被损坏时,最原始的上传者删掉自己的中转站文件重新上传,如果这个文件分享给朋友,朋友转入中转站保存,这个文件仍然会在服务器上。
此时,当服务器的文件被损坏后,最初的上传者再次上传正确的完好文件时,会被系统“快速上传”完成,造成服务器上的错误文件始终不能被更新!要解决这个Bug,第一要保证服务器上的文件绝对不能出错,但这是不可能的!所以,必须要在文件信息中保存第1个上传者的ID,允许第1个上传者完全上传更新服务器上的文件!
这就是腾讯设计上的问题,最初上传文件它在服务器上的MD5码是当时保存的,文件被破坏后,再次上传时并不是重新生成MD5码,而是用重新上传的文件,检测最初的MD5码,认为相同就被快速上传。
所以腾讯要改变这个Bug,另一个选择就是上传时在服务器实时检测已存在文件的MD5码,但这会占用太多的服务器资源,这是开发者不愿意看到的。
MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:
MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461
这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:
大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。
我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方。如在UNIX系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。MD5将任意长度的“字节串”映射为一个128bit的大整数,并且是通过该128bit反推原始字符串是困难的,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。所以,要遇到了md5密码的问题,比较好的办法是:你可以用这个系统中的md5()函数重新设一个密码,如admin,把生成的一串密码的Hash值覆盖原来的Hash值就行了。
正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为"跑字典"的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的 MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 Bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是 P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。这种加密技术被广泛的应用于UNIX系统中,这也是为什么UNIX系统比一般操作系统更为坚固一个重要原因。
参考资料地址:老冯的博客
版权声明:QQ中转站的极速之谜系原创文章,转载请注明出自Bruce[http://brucehan.com]



QQ中转站的定位是很不错的,短时间内转移较大文件比较方便,但国内的网络环境不适合。
@C.S.A 呵呵,好忧国忧民!
很少用
小东西不用它 就放7天
自己空间就放下了
大东西
半天都传不完
顺便来换链接
http://www.wenzb.info
有兴趣换不
我要你右边的播放器,怎么弄,加我Q123589099,教下我!
@wenzb 嗯.用这个主题需要很大的勇气!
@wx 你加我吧,我喜欢被询问。
我不知道QQ号码!
@wx 你猜你猜你猜猜猜……
简直是胡扯。什么国内网络环境不适用?TCP本来就实在不可信的网络中创造可靠连接的协议。这个只能归结为腾讯的BUG.