[问与答] 百度网盘有些文件有两个 MD5?

孤陋寡闻,昨天刚知道秒传油猴脚本这个东西,于是结合源码抓包研究了一下。

其基本原理可以用这篇文章嘿嘿,我发现了百度网盘秒传的秘密 – 51CTO.COM的这段话总结:

百度网盘上传时,如果是超过 256KB 的文件,将计算整个文件的 MD5 和文件前 256KB 内容的 MD5 ,并对两个 MD5 值加密后请求后端执行秒传。后端通过两个 MD5 和长度信息判断是否存在该文件,如果存在则完成秒传。

可能文章过时了,我没有发现对两个 MD5 值的加密,但发现了另一个现象,不得要领。描述如下:

百度页面提供的获取文件列表的 xhr 请求中可以看到每个文件的 MD5 (简称 MD5A ), 秒传请求中使用整个文件的 MD5 (简称 MD5B )和前 256KB 内容的 MD5 (简称 MD5C )。我发现有些文件的 MD5A 跟 MD5B 一致,有些文件的则不一致,并且这跟文件大小没有什么关系。MD5A 就是算出来哪个,而 MD5B 是从文件下载请求的响应 headers 中获取的,在 Content-MD5 字段。

所以请问,这个 MD5B 是怎么来的,怎么会跟 MD5A 不一致呢?已经有 MD5C 用来规避 MD5 碰撞了,这种设计又是为了什么?

发表评论

您的电子邮箱地址不会被公开。