bt种子的hansh值计算,最近忽然对bt种子感兴趣了(原因勿问)

1. bt种子(概念)

bt 是一个分布式文件分发协议,每个文件下载者在下载的同时向其它下载者不断的上传已经下载的数据,这样保证下载越快,上传越快,从而实现告诉下载

2. bt 如何实现下载同时上传文件

这个需要从文件本身说起,bt文件包含了两部分信息,一部分是Tracker信息,一部分是文件信息,tracker信息主要是记录下载过程中需要的tracker服务器地址和针对tracker服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果会以B编码规则进行编码(英文不太好,这部分信息来自百度百科)。 文件信息里,会把需要下载的文件进行分块,每个块的索引信息会写到torrent文件中,在这里上传一个迅雷的任务详细页面

可以看到具体的任务分块信息,每个下载者都可以上传自己已经下载的分块数据,如何获取其它下载者已经下载的分块信息数据呢,一种方式是通过tracker服务器来实现的,可以记录每个下载者,这也就是我们经常看见局域网的bt分享网站会有对上传下载的流量统计功能,每个人下载多少,上传多少,从而确定每个人的贡献值。

这也就是海盗湾之前被瑞典起诉的原因,tracker服务器提供了给每个下载者下载盗版的可能性和机会,当然现在对于众多的magnet协议,采用了dht技术,这样对于tracker服务器的存在就显得没有必要了,这是后话,慢慢在描述!

3.  bt的hash值计算(特征值计算)

由上可知,对于每一个bt种子,都有包含每个分块的文件信息,这样可以保证即使在tracker服务器有变化的情况下,bt种子的唯一性(这里,插一句,我曾经simple的以为,可以对bt种子取md5值就可以确定其唯一性,too naive啊),那如何计算这个hash值呢,这需要对bt文件组成的一个深入了解,这方面以后相当多的文章,附上一篇:

http://www.cnblogs.com/DxSoft/archive/2012/02/11/2346314.html

根据这篇文章的描述,谢了两段测试程序:

方法1:直接根据info后的字段信息即4:info后的字段,我们可以截取bt种子中的一段

例如:

d8:announce27:http://tk3.5qzone.net:8080/13:announce-listll27:http://tk3.5qzone.net:8080/el36:http://btfans.3322.org:8000/announceel36:http://btfans.3322.org:8080/announceel36:http://btfans.3322.org:6969/announceel42:http://denis.stalker.h3q.com:6969/announceel40:http://torrent-download.to:5869/announceel45:http://tracker.openbittorrent.com:80/announceel39:http://tracker.publicbt.com:80/announceel40:http://tracker.bittorrent.am:80/announceel30:http://tracker.prq.to/announceel34:http://tracker.prq.to/announce.phpel43:http://tracker.torrentbox.com:2710/announceel34:http://tpb.tracker.prq.to/announceel30:http://tr.wjl.cn:8080/announceel37:http://219.152.120.234:6969/announce el34:http://mdbt.3322.org:6969/announceee7:comment19:YYeTs人人影视资源站13:comment.utf-826:YYeTs浜轰汉褰辫璧勬簮绔?0:created by13:BitComet/0.7013:creation datei1261532244e8:encoding3:GBK4:infod5:filesld6:lengthi943e4:path

第一个字节d代表dict意思,字典组成,4:info 代表着info字段长度为4意思,这样我们可以写下解析hash的代码值:

#!python
import hashlib
def sha1sum(src):if not len(src):return ""m = hashlib.sha1(src)return m.hexdigest()#filename is the torrent file name
with open(filename) as f:torrent_data = f.read()if -1 != torrent_data.find("nodes"):info_data =
torrent_data[torrent_data.find("info")+4:torrent_data.find("nodes")-2]else:info_data =
torrent_data[torrent_data.find("info")+4:len(torrent_data) - 1]sha1_data = sha1sum(info_data)print "the hash data of torrent is: ", sha1_data.upper()

在实际测试时,发现,在torrent中,有两种情况,一种是包含nodes字段信息的;一种是不包含nodes信息的torrent种子,需要分别处理,但是这种处理的方式较为繁琐,也不清楚后续到底有多少的坑在里面,需要应对不同情况,于是去google了一下,在stackoverflow里面,提到一个库,即bencode库,这就是我们的第二种方案

方案2:

通过bencode库实现对hash值得计算(bencode库后续详细介绍和解读),代码如下(需要安装bencode库),地址:

https://pypi.python.org/pypi/BitTorrent-bencode/5.0.8.1

#!/usr/bin/pythonimport sys, os, hashlib, StringIO
import bencodedef main():# Open torrent filetorrent_file = open(sys.argv[1], "rb")metainfo = bencode.bdecode(torrent_file.read())info = metainfo['info']print hashlib.sha1(bencode.bencode(info)).hexdigest()    if __name__ == "__main__":main()

bt 介绍以及 bt 种子的hash值(特征值)计算相关推荐

  1. Java中的Hash值的计算方式,java哈希算法简单数据类型的具体实现

    最近被提及Java中HashMap的一些实现及哈希冲突等,借鉴了一位老哥的部分解析,比较明白的展示hash算法的应用吧 结论: 对于String.Integer等类复写了Object中的hashCod ...

  2. 国密算法:利用python进行sm3 hash算法,计算hash值,国密算法库gmssl的使用

    本篇介绍利用gmssl算法库中的sm3模块来进行hash值的计算. 一 sm3 hash算法的特点: sm3用于计算一个消息的hash值: 几乎无法被逆向,即通过hash值无法推断出原始消息: sm3 ...

  3. python+opencv 计算图片的感知hash值,来计算汉明距离,简单的找相似图片

    感知哈希算法是一类算法的总称,包括aHash.pHash.dHash.顾名思义,感知哈希不是以严格的方式计算Hash值,而是以更加相对的方式计算哈希值,因为"相似"与否,就是一种相 ...

  4. Java中的Hash值到底是怎么计算的

    最近被提及Java中HashMap的一些实现及哈希冲突等,不知不觉就想到哈希值到底是怎么计算出来的,正文如下. 结论: 对于String.Integer等类复写了Object中的hashCode方法的 ...

  5. 根据hash值找到bt种子的磁力下载链…

    有时大家需要通过某个bt种子(torrent)下载某些资源,但无法直接找到.torrent格式的附件或其下载地址.比如,在某论坛限于权限只能看到hash信息(一串hash值),而"磁力链接& ...

  6. [转]通过 BT 种子 Hash 值从 BitComet 服务器上下载种子文件

    可以直接将torrent的hash值接在"magnet:?xt=urn:btih:" 后,生成磁力链接,经测试可用!~~ 以下为转载内容: 程序和代码下载: UMU 的网盘 htt ...

  7. java中hash值什么意思_到底什么是hash?它起什么作用?

    从emule诞生到现在也已经有了两年左右时间了,随着emule的普及,喜欢他的人也越来越多,但是由于网络 从emule诞生到现在也已经有了两年左右时间了,随着emule的普及,喜欢他的人也越来越多,但 ...

  8. 同一个字符串hash值相同吗_图说:为什么Java中的字符串被定义为不可变的

    原文地址:https://dwz.cn/zWeX9Z7k 作者:Hollis 文章来源:微信公众号 字符串,想必大家最熟悉不过了,通常我们在代码中有几种方式可以创建字符串,比如:String s = ...

  9. yuv,ycbcr,ypbpr,yiq itu-r bt.656 itu-r bt.601

    YUV,是一种颜色编码方法. YUV是编译true-color颜色空间(color space)的种类,Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠. " ...

  10. HTML加js实现计算文件哈希值,HTML5 File API 配合 Web Worker 计算大文件 SHA3 Hash 值

    这学期的安全学课程有个作业,内容是写一个软件实现 SHA3 Hash 值的快速计算.想一想老师这么安排,大致上也有一种推广新的密码学算法的意图.既然希望应用起来,天然跨平台的 Web 显然是一项非常具 ...

最新文章

  1. Google 公司的 Java 语言编写规范
  2. oracle 11g libclntsh.so.10.1,cx_Oracle找不到libclntsh.so.10.1错误
  3. 学会转变你的思维方式,一切都会变得不一样
  4. linux关于界面的API,linux系统基础知识(ABI和API)
  5. linux下使用VS CODE + CMAKE 调试C++程序
  6. Linux 下C++编写
  7. linux能挂载的文件类型,mount命令是如何自动识别挂载点的文件系统类型的
  8. 【Matplotlib】【Python】如何使用matplotlib绘制各种图形
  9. 使用PHP开发你必须得注意的要点
  10. Python 扩展知识:编程习惯
  11. 仅需6道题轻松掌握Python时间和日期处理 | Python技能树征题
  12. 一个程序通过窗体句柄控制另一个窗体
  13. python打包,上传包知识点学习
  14. EPLAN P8 2.7在WIN10上安装无法连接虚拟加密狗的解决方法
  15. linux下载和安装activemq
  16. 华为云IoT提出万物互联新范式,从万物感知到万物生长
  17. Hadoop专业解决方案-第5章 开发可靠的MapReduce应用
  18. Android apk安装报错:应用未安装 软件包似乎已损坏
  19. 网站内部优化-怎么做好网站内部SEO优化-网站内部SEO优化方案
  20. 江恩 计算机,江恩理论基础篇

热门文章

  1. TLSF算法2:位图的相关计算
  2. 【跨越鸿沟】学术界与工业界的GAP有多大?
  3. inventor牙距_10 INVENTOR螺纹特征,是否有何设置,可让螺纹类型默认为GB Metric
  4. 354. 俄罗斯套娃信封问题--(每日一难phase2--day9)
  5. 图的邻接矩阵求图的出度,入度,可达矩阵,判断强连通,弱连通,单向连通(C++,vs2017)
  6. CnPack常用的功能,太方便了!
  7. 2021年危险化学品经营单位安全管理人员考试报名及危险化学品经营单位安全管理人员作业考试题库
  8. 扫描工具扫描法查看网内IP使用情况
  9. Windows32下安装Ruby 2.7.2【记录安装过程】
  10. ios 更多 Url Schemes