Python3计算torrent哈希

时间:2017-09-03 16:52:50

标签: python python-3.x hash torrent

下面的代码(为丑陋道歉),我正在运行它来计算一个洪流的哈希值,但它给我一个不同的答案,而不是直接在传输中打开那个torrent:

我在此页面上对r_000进行了测试:http://gen.lib.rus.ec/repository_torrent/

传输给了我:63a04291a8b266d968aa7ab8a276543fa63a9e84

我的代码给了我:1882ff6534ee4aa660e2fbf225c1796638bea4c0

attributedTitle

知道我搞砸了什么吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我犯了同样的错误。搜索发现了这个问题,这有助于我解决它。但是为了让通过搜索如何从python3 +进行搜索的其他人更清楚,这是明确的解决方法:

变化:

hashed_info = hashlib.sha1(info[b'pieces']).hexdigest()

为:

hashed_info = hashlib.sha1(bencoding.bencode(info)).hexdigest()

感谢Encombe澄清信息哈希:https://stackoverflow.com/questions/28140766/28162042#28162042

  

torrent客户端中的哈希值或您在magnet-URI中找到的哈希值   原始bencoded信息字典的SHA1哈希部分   洪流文件。

一个完整但极简主义的例子是:

import bencoding, hashlib

objTorrentFile = open("r_0000.torrent", "rb")
decodedDict = bencoding.bdecode(objTorrentFile.read())

info_hash = hashlib.sha1(bencoding.bencode(decodedDict[b"info"])).hexdigest()
print(info_hash)

结果:

$ python3 example.py
63a04291a8b266d968aa7ab8a276543fa63a9e84