当前位置: 首页 > 知识库问答 >
问题:

网盘通过磁力和种子离线下载的时候,是怎么获取单个文件的完整哈希值的?

南门新荣
2024-08-30

根据我查找的资料,以及自己做种目前知道的信息是
种子文件会把完整的文件分块,每块对应一串哈希值,并且记录文件结构树,文件大小,文件名
但是无法通过种子文件拿到单个文件的完整哈希值

那么网盘离线下载的时候,他是需要得到单个文件的哈希值来判断服务器中有没有吧?
初次遇到该磁力/种子的时候他可以在服务器完成下载后记录该磁力/种子对应哪些文件没问题

可是不同种子中重叠的文件应该很多,但115基本都能离线,那么在这种情况下
B种子80%的文件在已经离线成功过的A种子中,他不可能把B种子的文件再全部下载下来然后计算单个文件的哈希值,然后记录入库吧?
这样做我觉得服务器的压力太大了,但不这样搞,他是怎么知道B种子中每个文件的哈希值的?
或者是压根没使用整体哈希对比,比如单独对文件进行多种分块策略的哈希计算,然后记录下来?(感觉也离谱)

困扰了我很久了,希望有网盘从业者解答
补一张种子结构图(后边全是块哈希,没有其他任何信息)

共有2个答案

郝玄天
2024-08-30

很简单,种子里的文件在离线服务器都有,那么种子的META HASH + 文件下标, 就能作为唯一标识了,然后通过唯一标识就可以知道服务器有没有了

夹谷浩博
2024-08-30

通过种子文件或磁力链接中的元数据信息来实现的

 类似资料:
  • 问题内容: 我已经到处寻找答案,但是似乎只能找到可以满足您需求的软件。有人知道如何在python中执行此操作吗? 问题答案: 我写了一段python代码,根据 .torrent文件 中的内容验证 下载文件 的哈希值。假设您要检查下载是否损坏,则可能会发现此功能有用。 __ 您需要bencode包才能使用它。Bencode是.torrent文件中使用的序列化格式。它可以封送列表,字典,字符串和数字,

  • 问题内容: 我有一个表单(HTML,PHP),允许最终用户上传文件,以使用上传文件(特别是.csv)中的记录来更新数据库(MySQL)。但是,在phpscript中,我只能获取文件名,而不能获取特定文件的完整路径。由于这个原因,fopen()失败。谁能让我知道如何找到完整的路径? HTML代码: PHP脚本: 问题答案: 引用 客户端 上的文件名。要在 服务器端 获取文件名(包括完整路径),您需要

  • 我正在使用BCryptPasswordEncoder使用spring security。现在对于更改密码,我需要做的是比较用户提供的现有密码和DB值。 但是由于salt是由动态生成的,所以每次我从下面的方法得到不同的散列值,并且不一定会与我的DB值匹配。 解决这个问题的办法是什么?我能识别用于我的DB字段的盐并在上面的方法中使用相同的盐吗?

  • 问题内容: 我有敏感文件要下载给用户,每个用户只能 下载 给定文件一次。如果下载失败,我希望允许重新下载,但不允许其他方式。 仅仅依靠在服务器上记录/处理文件下载 请求 是不够的-我需要确定性地知道文件何时完成以及在客户端是否就位,因为我的许多用户都在频繁掉线的环境中工作。 最有效的方法是,浏览器从“另存为…”对话框中暴露出一个“文件已保存”事件,该事件可能会链接到下载页面上的JavaScript

  • <!doctype hibernate-mapping PUBLIC“-//hibernate/hibernate Mapping DTD 3.0//en”“http://hibernate.org/DTD/hibernate-mapping-3.0.DTD”>

  • 问题内容: 我使用了hashlib(在Python 2.6 / 3.0中代替了md5),如果我打开一个文件并将其内容放入函数中,它就可以正常工作。 问题在于非常大的文件,其大小可能超过RAM大小。 如何在不将整个文件加载到内存的情况下获取文件的MD5哈希? 问题答案: 将文件拆分为8192字节的块(或128字节的其他倍数),然后使用连续将其送入MD5 。 这利用了MD5具有128字节摘要块(819

  • 问题内容: 如何找到哈希表的当前负载率和容量? 问题答案: 您不应该能够获得负载系数和容量。它们是hashmap类的实现细节。但是,您可以使用反射。尽量避免使用它,但这通常是一个坏主意。

  • 问题内容: 我设法使我的第一个python脚本起作用,该脚本从URL下载.ZIP文件的列表,然后继续提取ZIP文件并将其写入磁盘。 我现在无所适从,无法实现下一步。 我的主要目标是下载并提取zip文件,并通过TCP流传递内容(CSV数据)。如果可以的话,我宁愿不实际将任何zip或解压缩的文件写入磁盘。 这是我当前的脚本,可以运行,但是不幸的是必须将文件写入磁盘。 问题答案: 我的建议是使用一个对象