新建一个文本文件 ,文件 内容 为123456,用Bittorrent客户端制作种子文件 :

d8:announce44:udp://tracker.openbittorrent.com:80/announce13:announce-listll44:udp://tracker.openbittorrent.com:80/announceel42:udp://tracker.opentrackr.org:1337/announceee7:comment18:this is a comment.10:created by17:BitTorrent/7.10.513:creation datei1628327795e8:encoding5:UTF-84:infod6:lengthi6e4:name7:dos.txt12:piece lengthi16384e6:pieces20:|J    Ê7b¯aå• ”=Âd”ø”ee

64 38 3A 61 6E 6E 6F 75 6E 63 65 34 34 3A 75 64 70 3A 2F 2F 74 72 61 63 6B 65 72 2E 6F 70 65 6E 62 69 74 74 6F 72 72 65 6E 74 2E 63 6F 6D 3A 38 30 2F 61 6E 6E 6F 75 6E 63 65 31 33 3A 61 6E 6E 6F 75 6E 63 65 2D 6C 69 73 74 6C 6C 34 34 3A 75 64 70 3A 2F 2F 74 72 61 63 6B 65 72 2E 6F 70 65 6E 62 69 74 74 6F 72 72 65 6E 74 2E 63 6F 6D 3A 38 30 2F 61 6E 6E 6F 75 6E 63 65 65 6C 34 32 3A 75 64 70 3A 2F 2F 74 72 61 63 6B 65 72 2E 6F 70 65 6E 74 72 61 63 6B 72 2E 6F 72 67 3A 31 33 33 37 2F 61 6E 6E 6F 75 6E 63 65 65 65 37 3A 63 6F 6D 6D 65 6E 74 31 38 3A 74 68 69 73 20 69 73 20 61 20 63 6F 6D 6D 65 6E 74 2E 31 30 3A 63 72 65 61 74 65 64 20 62 79 31 37 3A 42 69 74 54 6F 72 72 65 6E 74 2F 37 2E 31 30 2E 35 31 33 3A 63 72 65 61 74 69 6F 6E 20 64 61 74 65 69 31 36 32 38 33 32 37 37 39 35 65 38 3A 65 6E 63 6F 64 69 6E 67 35 3A 55 54 46 2D 38 34 3A 69 6E 66 6F 64 36 3A 6C 65 6E 67 74 68 69 36 65 34 3A 6E 61 6D 65 37 3A 64 6F 73 2E 74 78 74 31 32 3A 70 69 65 63 65 20 6C 65 6E 67 74 68 69 31 36 33 38 34 65 36 3A 70 69 65 63 65 73 32 30 3A 7C 4A 8D 09 CA 37 62 AF 61 E5 95 20 94 3D C2 64 94 F8 94 1B 65 65

上面为对应文本,下面为对应的16进制源;可见,种子文件是bencode编码的,这个种子文件的info_hash磁力算法:涉及以下几个字段,就是info字典,但要重新sha1,需要解码

infod6:lengthi6e4:name7:dos.txt12:piece lengthi16384e6:pieces20:|J    Ê7b¯aå• ”=Âd”ø”ee

def torrent_file_to_magnet(torrent_file):data = open(torrent_file, 'rb').read() #读文件 metadata = bencode.bdecode(data)   #bcode解码还原print('------------------------------')print(metadata['info'])            #还原infoprint('------------------------------')name = metadata['info']['name']#metadata['info']['name']='x'   #假设更改name字段,看是否变,事实上,变了print(metadata['info']['name'])dn = quote(name)info_bts = bencode.bencode(metadata['info'])info_hash = hashlib.sha1(info_bts).hexdigest()return f'magnet:?xt=urn:btih:{info_hash}&dn={dn}'#输出的metadate['info']
OrderedDict([('length', 6), ('name', 'dos.txt'), ('piece length', 16384), ('pieces', b'|J\x8d\t\xca7b\xafa\xe5\x95 \x94=\xc2d\x94\xf8\x94\x1b')])

也就是说,种子文件是 length,name,pice length,pieces这几个字段经过bencode后,最后sha1算法得到的;解,编,实际上,就是info字段sha1后的结果;

d6:lengthi2715254784e4:name30:ubuntu-20.04-desktop-amd64.iso12:piece lengthi1048576e6:pieces51800:

在种子文件中,从info后开始,尾部去e(多了一个e;);这段内容,经sha1编码,就是info_hash;就是磁力链接

res = '123456'print(hashlib.sha1(res.encode('utf-8')).hexdigest())
//输出:
7c4a8d09ca3762af61e59520943dc26494f8941b

上面的输出 就是文本文件 123456的piceces内容对应:7C 4A 8D 09 CA 37 62 AF 61 E5 95 20 94 3D C2 64 94 F8 94 1B ,也就是最上面的种子文件 的内容;

把d6:lengthi6e4:name7:dos.txt12:piece lengthi16384e6:pieces20:|J    Ê7b¯aå• ”=Âd”ø”这段内容sha1后,就是磁力链接

BT种子文件以及磁力文件 解析相关推荐

  1. python编程入门指南磁力下载-实战Python语言实现BT种子转化为磁力链接

    本文主要向大家介绍了实战Python语言实现BT种子转化为磁力链接,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 经常看电影的朋友肯定对BT种子并不陌生,但是BT种子文件相对磁力 ...

  2. Python实现BT种子转化为磁力链接【实战】

    经常看电影的朋友肯定对BT种子并不陌生,但是BT种子文件相对磁力链来说存储不方便,而且在网站上存放BT文件容易引起版权纠纷,而磁力链相对来说则风险小一些. 将BT种子转换为占用空间更小,分享更方便的磁 ...

  3. 用Python实现BT种子转化为磁力链接

    经常看电影的朋友肯定对BT种子并不陌生,但是BT种子文件相对磁力链来说存储不方便,而且在网站上存放BT文件容易引起版权纠纷,而磁力链相对来说则风险小一些. 将BT种子转换为占用空间更小,分享更方便的磁 ...

  4. python编程入门指南磁力下载-Python实现BT种子转化为磁力链接【实战】

    经常看电影的朋友肯定对BT种子并不陌生,但是BT种子文件相对磁力链来说存储不方便,而且在网站上存放BT文件容易引起版权纠纷,而磁力链相对来说则风险小一些. 将BT种子转换为占用空间更小,分享更方便的磁 ...

  5. Python基础项目实战:实现BT种子转化为磁力链接

    经常看电影的朋友肯定对BT种子并不陌生,但是BT种子文件相对磁力链来说存储不方便,而且在网站上存放BT文件容易引起版权纠纷,而磁力链相对来说则风险小一些. 将BT种子转换为占用空间更小,分享更方便的磁 ...

  6. 网络资源下载方式:http/https、ftp/sftp、BT种子、磁力下载、ed2k下载等的区别

    文章目录 参考资料 序言 中心化下载 http/https下载 ftp/sftp下载 http与ftp下载方式的不同 中心化下载的缺点 去中心化下载 BT种子下载 磁力下载 ed2k下载 推荐的下载器 ...

  7. 一文读懂Bt种子、磁力链接、直链、p2p这些下载的区别

    什么是直链 什么是Bt种子 什么是磁力 什么是p2p 它们有什么区别,原理分别是什么 我们先说什么是直链 直链就是直接从服务器下载数据 他是我们日常生活中最最最常见的下载方式 我们从应用商店下载软件 ...

  8. # 解析bt文件_磁力链接和BT种子使用方法

    目前用的最多的是磁力链接和BT种子,不过好多人并不太会使用,因此写个教程给大家说明一下. 何为磁力链接:简单地说,磁力链接是一种特殊链接,但是它与传统基于文件的位置或名称的普通链接(如http://x ...

  9. B编码与BT种子文件分析,以及模仿json-cpp写一个B编码解析器

    B编码与BT种子文件分析,以及模仿json-cpp写一个B编码解析器 1.什么是B编码 2.B编码格式 3.种子文件结构 3.1.主文件结构 3.2.info结构 4.简单的例子了解一下种子文件和B编 ...

  10. python下载bt文件_python获取bt种子的详细信息

    bt种子具体文件结构如下: 全部内容必须都为bencoding编码类型. 整个文件为一个字典结构,包含如下关键字 announce:tracker服务器的URL(字符串) announce-list( ...

最新文章

  1. Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
  2. Visual Studio“Orcas”October 2006 CTP版下载
  3. Vue + SpringBoot跨域
  4. NERDTree 快捷键辑录
  5. 智能优化算法:世界杯优化算法-附代码
  6. en55032最新标准下载_欧盟新EMC标准EN55032将强制实施
  7. linux打印机驱动教程视频,Linux打印机配置wmv视频教程
  8. EEGLAB预处理脑电数据
  9. SecureCRT无法使用Zmodem上传下载文件
  10. 如何设置html背景,如何给html设置背景
  11. sigar(System Information Gatherer And Reporter)简介
  12. Windows下自动云备份思源笔记到Gitee
  13. wamp5数据库密码修改
  14. Vue 项目处理每次发版后要清理浏览器缓存
  15. 单模、多模有什么区别
  16. one-hot表示和分布式表示
  17. 【FFmpeg】做一个抖音/快手视频模板常用哪些功能
  18. [30期] 个人职业规划
  19. nanomsg(4) :pub/sub 模式
  20. 软件设计师(软件工程)

热门文章

  1. 【EPS精品教程】EPS2016三维测图版安装教程(附EPS2016安装包下载地址)
  2. 南方cass简码识别大全_cass简码识别教程.doc
  3. 程序设计语言编译原理-陈火旺(第三版)简答题复习
  4. git代码比较,没有差异却显示出来
  5. Repast——Agent对象换成图标和显示属性问题
  6. 《机器人学基础》整理(1)
  7. mysql数据库程序设计实例_mysql数据库编程精华案例347个(知此347个例子,便是高手矣)...
  8. Flash MX 认证考试(样题)
  9. 互联的情怀 凝成一股绳共同成长
  10. 计算机那种专业包括vr,VR技术的大学专业有哪些