分享好友 最新动态首页 最新动态分类 切换频道
百度网盘秒传的秘密【转载】
2024-12-25 12:10

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

有个读者在微信上问我:百度网盘的秒传功能是如何实现的?

这个问题我其实有想过,我猜测大概是前端计算一个文件的哈希值(比如MD5)发送给后端,网盘服务器判断是否存在这个文件,如果存在就直接在后端完成文件的“转存”,直接告诉前端:上传成功。

不过这是我自己猜测的,到底对不对,一直也没有去验证过。

我把我的猜测告诉了他,结果他问了一句:如果发生哈希冲突了怎么办呢?。

我想了一下又说:那就多加几个哈希!

不过百度网盘到底是怎么做的呢?这位读者既然问到了,我就趁机花了几分钟研究了一下,算是解答了这个疑惑,增加了知识。

MD5 冲突
首先,只用一个哈希值,已经有事实证明是会发生冲突的,而不只是理论上。

所以,如果只用一个哈希值就判定是同一个文件,那就比较容易会出现张冠李戴的情况。

甚至,有人还基于此提出一种哈希碰撞攻击:如果我知道一个文件的md5值,但拿不到这个文件,我通过数学计算,构造一个相同md5的文件,那岂不是就把那个文件直接给我转存过来了?如果是一个私密的文件呢?那不出事了!

百度网盘的做法
那百度网盘是咋做的呢?

首先上传一个稍微大一点的文件(小文件有计算哈希的功夫早就传完了),使用浏览器F12大法,看一下它的网络请求

可以看到,百度网盘对文件进行了分块传输,这也是目前业界比较流行的做法,对大文件进行分块,如果网络不好断开了,下次只需要传输剩下的分块就行了,做到了断点续传。

不过注意看,在上面分块的中间,插入了一个叫rapidupload接口的请求,从名字你也可以猜出来了,这个接口肯定跟它的“秒传”功能有关系

来看一下请求的参数,是一个Form表单,有这么几个字段

content-length: 文件长度

content-md5: 文件的MD5

slice-md5: 文件切片的MD5

看到这里你估计猜到了,肯定是这三个参数联合判断,同时满足条件才算是同一个文件!

来看下服务器响应了什么

秒传成功了!

那如果上传一个后端肯定不存在的文件会是返回什么呢?我构造了一个做测试

看到了吧,404!说明后端没这个文件,那就老老实实传吧!

接着,我想看一下这个切片md5,百度网盘是怎么在切的。

通过网络通信中的Initiator功能,可以定位到是哪里的JS代码在发生请求

通过调用堆栈,看到了叫rapidUpload这个函数,再上下一跟进,找到了这个切片MD5计算的地方

其实就是对文件的前262144个字节,也就是256KB进行计算。如果文件比这还小,那就用不着秒传了。

但奇怪的是,我扣取了文件的前256个字节,计算出来的md5,和它接口中上传的参数并不一致!

这让我疑惑了好几分钟,难道事情没这么简单?

我又打了断点在计算的位置,发现它计算的跟我计算的又是一样的,但通过网络发出去以后就变了,真是薛定谔的MD5,奇怪了!

不过,程序不是量子力学,它不会骗人,很快我就找到了问题所在:百度网盘可能担心自己的路数被发现,对文件的MD5和切片MD5都进行了加密!

这就是加密函数

一些简单的字符串处理而已。

好了,现在可以回答前面读者的问题了

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

这样做,虽然理论上也不能保证不会发生哈希碰撞,但通过这种方式,至少将概率降低了许多。

最新文章
IM出海的品牌推广有哪些技巧?
随着全球化进程的加速,越来越多的中国互联网公司(IM,即Instant Messaging)选择出海,开拓国际市场。然而,面对文化差异、市场竞争和用户习惯的挑战,如何有效地进行品牌推广成为了一个亟待解决的问题。本文将详细探讨IM出海的品牌推广
50个谷歌英文外链发布论坛社区平台
以下是一些可以发布外链的论坛社区集合,这些论坛允许用户在个人资料页、帖子或博客文章中添加自己的网站
GPU是如何训练ai大模型的
  在AI模型的训练过程中,大量的计算工作集中在矩阵乘法、向量加法和激活函数等运算上。这些运算正是GPU所擅长的。接下来,AI部落小编带您了解GPU是如何训练AI大模型的。  GPU在AI大模型训练中的应用  在AI大模型的训练过程中,GPU能
2024新奥资料免费精准,国产化作答解释落实_游戏版256.184
《2024年新奥资料免费精准国产化作答解释落实游戏版256.184》:这款软件凭借其独特的创新和高质量赢得了广大用户的喜爱。它采用了先进的AI技术实时更新数据保证了用户获取的是最新的、最准确的信息。软件还具备强大的数据分析能力帮助用户
IDEA的Docker插件实战(Dockerfile篇)
参考链接1 参考链接2 #修改Docker服务文件vim /lib/systemd/system/docker.service​# 通常使用端口2375与守护进程进行非加密通信,使用端口2376与守护进程进行加密通信。#修改ExecStart行,添加如下配置-H tcp://0.0.0.0:2375
2024年Python最新爬虫案例:手把手教你爬取图片(2),面试经历分享
最后 🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。 🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。 🍅 面试题库:由技术群里的小
AI落后美国已成定局? 中国还有“釜底抽薪”的一招
​​▲ 美国橡树岭国家实验室的超级计算机Frontier。导 读 自从Chat-GPT公开测试,“人工智能”和下一个科技爆发点就成为各界密切关注的话题。人工智能可能带来的美好未来毋庸置疑,但大模型训练所需要的资金、设备、能源投入,也是一个令
2024年腾讯云双十二大促快结束了,云服务器+云存储组合优惠来袭!
​​2024年腾讯云双十二大促快结束了,云服务器+云存储组合优惠来袭!腾讯云大促最后几天,都知道云产品每年都涨价,错过优惠不再有!腾讯云有优惠活动吗?2024年末腾讯云双十二大促活动,云服务器价格多少钱?2024年腾讯云12月轻量服务器
ai设计说明文案大全怎么写好看:简洁实用的撰写技巧
在数字化浪潮的推动下设计逐渐成为企业竞争的新点。一份清晰、美观的设计说明文案不仅可以提升产品的专业形象还能有效传达设计理念促进项目合作。怎么样撰写一份既好看又实用的设计说明文案呢?本文将为您详细解析简洁实用的撰写技巧助您轻
20230831 #震昇球馆 初中队0820小场4X4 03 土豆队vs叶翔队
{{if !data.isVip && data.isActText}}{{else if !data.isVip && !data.isActText}}{{else}}{{if !data.isNormalVip}}{{if data.expiredVip && data.isActText}}{{else if data.expiredVip && !data.isActText}}{{else}}{{/if}}{{else if d
相关文章
推荐文章
发表评论
0评