gpt4 book ai didi

hash - 如何将官方实现的老虎哈希值转换为专线使用的形式?

转载 作者:行者123 更新时间:2023-12-05 01:08:58 25 4
gpt4 key购买 nike

我正在尝试实现 Direct Connect客户端,而我目前处于需要散列文件以便能够将它们上传到其他客户端的地步。

因为所有其他客户端都需要 TTHL(Tiger Tree Hashing 叶)支持来验证下载的数据。我搜索了该算法的实现,并找到了 tiger-hash-python .

根据 Tree Hash EXchange format (THEX) 中指定的逻辑,我已经实现了一个使用之前的散列函数的例程,并且能够散列大文件。 (基本上,树状图是该页面上的重要部分)。

然而,它产生的值(value)与shown on Wikipedia相似,十六进制摘要,但与我用作引用的 DC 客户端中显示的不同。

我一直无法找出十六进制摘要形式如何转换为另一种形式(39 个字符,A-Z,0-9)。有人可以解释一下这是如何完成的吗?


好吧...我尝试了 Paulo Ebermann 所说的,使用了以下函数:

def strdivide(list,length):
result = []
# Calculate how many blocks there are, using the condition: i*length = len(list).
# The additional maths operations are to deal with the last block which might have a smaller size
for i in range(0,int(math.ceil(float(len(list))/length))):
result.append(list[i*length:(i+1)*length])
return result
def dchash(data):
result = tiger.hash(data) # From the aformentioned tiger-hash-python script, 48-char hex digest
result = "".join([ "".join(strdivide(result[i:i+16],2)[::-1]) for i in range(0,48,16) ]) # Representation Transform
bits = "".join([chr(int(c,16)) for c in strdivide(result,2)]) # Converting every 2 hex characters into 1 normal
result = base64.b32encode(bits) # Result will be 40 characters
return result[:-1] # Leaving behind the trailing '='

发现空文件的 TTH 为 8B630E030AD09E5D0E90FB246A3A75DBB6256C3EE7B8635A,转换后指定为 here , 变为 5D9ED00A030E638BDB753A6A24FB900E5A63B8E73E6C25B6。对该结果进行 Base-32 编码产生 LWPNACQDBZRYXW3VHJVCJ64QBZNGHOHHHZWCLNQ,这被发现是 DC++ 生成的。

最佳答案

我发现的 Direct Connect 协议(protocol)中唯一提到哈希格式的是 $SR page on the NMDC Protocol wiki :

For files containing TTH, the <hub_name> parameter is replaced with TTH:<base32_encoded_tth_hash> (ref: TTH_Hash).

因此,它是 Base32 编码。这是在 RFC 4648(和一些更早的版本)中定义的,section 6 .基本上,您使用的是大写字母 A-Z 和十进制数字 2 到 7,一个 base32 数字代表 5 位,而一个 base16(十六进制)数字仅代表 4 个。

这意味着,每 5 个十六进制数字映射到 4 个 base32 数字,对于 Tiger 哈希(192 位),您将需要 40 个 base32 数字(在官方编码中,最后一个将是 = 填充,如果你说总是有 39 个字符,这似乎被省略了)。

我不确定从十六进制(或字节)到 base32 的转换的实现,但它不应该因为查找表和一些位移而太复杂。

关于hash - 如何将官方实现的老虎哈希值转换为专线使用的形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8405105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com