下面的代码(为丑陋道歉),我正在运行它来计算一个洪流的哈希值,但它给我一个不同的答案,而不是直接在传输中打开那个torrent:
我在此页面上对r_000进行了测试:http://gen.lib.rus.ec/repository_torrent/
传输给了我:63a04291a8b266d968aa7ab8a276543fa63a9e84
我的代码给了我:1882ff6534ee4aa660e2fbf225c1796638bea4c0
attributedTitle
知道我搞砸了什么吗?谢谢!
答案 0 :(得分:1)
变化:
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