- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现 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/
我需要做些什么来制作我的按钮(或其他,请告诉我应该怎么做) 我用): Start playing music on ACTION_HOVER_ENTER Keep playing (without r
我是一名优秀的程序员,十分优秀!