【问题标题】:Extract the hash from Torrent File in ruby从 ruby​​ 中的 Torrent 文件中提取哈希
【发布时间】:2015-06-17 08:40:35
【问题描述】:

我希望提取一个 torrent 文件的哈希标识符。

特别是,我正在寻找在打开 torrent 信息对话框时出现在传输/uTorrent 中的相同哈希(看起来像这样:7b435a6f051dec092a6ee440d793bfed6696cfa1)

认为这是种子文件信息字典中的 SHA1 哈希。如果我要将二进制文件数据从一个字节解析到另一个字节,然后执行 SHA1 哈希加密,我可以得到它。

有没有人有更好的理解或有一些代码可以做到这一点?

【问题讨论】:

    标签: ruby hash bittorrent


    【解决方案1】:

    使用bencode gem:

    require 'bencode'
    require 'digest/sha1'
    
    meta = BEncode.load_file(file) # File or file path
    info_hash = Digest::SHA1.hexdigest(meta["info"].bencode)
    

    【讨论】:

    • 你的答案很好用,但是你能用两件事更新你的答案吗: 1. 在一些文档上指出这个散列是种子文件的整个信息部分的 SHA1 散列。 2 - 为什么你从经过编码的信息中获取 SHA1,而不是从经过解码的信息中获取?
    • @SET 没有,它似乎是一种普遍采用的约定,而不是实际比特种子规范的一部分。这就是为什么您不从种子本身读取信息哈希的原因。信息散列很简单,就是 torrent 的“信息”部分的 SHA1 散列(原样;未解码)。 “信息”部分封装了可以唯一标识种子的所有内容(docs)。更多信息:ktorrent.org/wiki/index.php/Info_hash
    【解决方案2】:

    您可以尝试RubyTorrent,这里有一个如何从 .t​​orrent 文件中转储元数据的示例:https://github.com/dydx/RubyTorrent/blob/master/dump-metainfo.rb

    还有一个bencode gem 可以用来解析.torrent 文件。

    【讨论】:

      【解决方案3】:

      使用firecracker gem

      require "firecracker"
      require "bencode_ext"
      require 'open-uri'
      
      torrent = open(link).read
      
      # Get the info_hash from torrent file
      info_hash = Firecracker.hash(torrent.bdecode)
      puts "Info Hash = " + info_hash
      

      【讨论】:

        猜你喜欢
        • 2011-02-04
        • 1970-01-01
        • 1970-01-01
        • 2019-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多